Thousands Separator と言うか、いわゆる 3 桁区切りとか 1,000 区切りとか千の位のコンマと言うか、位取りと言うか
SUSv2 に対応してると flag に ' を与えると桁区切りしてくれる模様。
Cygwin や Ubuntu で確認した範囲だと bash はこれに該当するが、C/C++ は該当してないようだ。
printf("%'d", 1234567890);
Cygwin や Ubuntu で確認した範囲だと bash はこれに該当するが、C/C++ は該当してないようだ。
2010-12-07 現在 Ubuntu 10.04 で確認する限りにおいて Ruby 1.8.7 の format では SUSv2 の flag には対応出来てない模様
関数でやるとこんな感じか?
関数でやるとこんな感じか?
def ts x; x.to_s =~ /^([^.]*\d)(\d{3}(\.|$))/ ? x = ts($1)+","+$2+$' : x; end
Ruby 版のデッドコピーだけどこんな感じか?
function ts(x){ var y,z; return x.toString().match(/^([^.]*\d)(\d{3}(\.|$))/) ? (y = RegExp.$2, z = RegExp.rightContext, x = ts(RegExp.$1) + "," + y + z) : x; }再帰すると RegExp が上書きされるので、計算順序に注意しながら若干工夫する必要があるみたい。
std::ostringstream に std::locale 食わせると良いらしい。
多分こんな感じ。
参考:
追記: 2018-10-15
Cygwin だと libstdc++ のコンパイルオプションが腐ってるらしく std::locale が "C" と "POSIX" 以外食わせると runtime_exception 吐くので、現時点でこの方法は使えない模様。
関連:
多分こんな感じ。
#include <string> #include <sstream> #include <locale> template<class T> inline const std::string ts(T v) { std::ostringstream oss; oss.imbue(std::locale("")); oss << std::fixed << v; return oss.str(); }
参考:
- stackoverflow / 2016-11-16: Format thousands separator
- Yahoo!知恵袋 / 2016-12-14: Microsoft Visual C++ 2010 の MFC を使っています。…
追記: 2018-10-15
Cygwin だと libstdc++ のコンパイルオプションが腐ってるらしく std::locale が "C" と "POSIX" 以外食わせると runtime_exception 吐くので、現時点でこの方法は使えない模様。
関連:
String::Format Method を使うと Excel の書式指定と同じ方式で出来るようだ。
C++ でも CLR でコンパイルすると使えるっぽいけど。
- MSDN Library / NET Development / .NET Framework 4.6 and 4.5 / Development Guide / Application Essentials / Base Types / Formatting Types / Custom Numeric Format Strings # The "," Custom Specifier
C++ でも CLR でコンパイルすると使えるっぽいけど。
「書式指定ミニ言語仕様」に grouping_option ::= "_" | "," があるので、format() を使って、以下のようにすると "," または "_" で桁区切り出来る。
参考:
a = 123456789 format(a, ",") # or format(a, "_")Python 3.6 で導入された「フォーマット済み文字列リテラル」を用いると、以下のように書くことも出来る。
a = 123456789 f'{a:,}' # or f'{a:_}'また、「数値リテラル」では整数、浮動小数点数共に "_" が桁区切り文字として無視されるので、以下のように数字の間の任意の位置に書くことができる。
a = 1_23_456_7890
参考:
- DevelopersIO / 2019-08-12: 知っているようで意外と知らなかったPython小ネタ集, ネタ元: Twitter: 1161483051811188738
Format の書式として N0 を与えればよい。
"{0:N0}" -f 1000 (1000).ToString("N0")参考:
- Microsoft / Learn
- PowerShell / 文字列での変数の代入について知りたかったことのすべて
- .NET / 標準の数値書式指定文字列 # 標準書式指定子
タグ
コメントをかく