12

カンマを千単位の区切り文字として使用して、数値を文字列に変換したいと思います。何かのようなもの:

x = 120501231.21;
str = sprintf('%0.0f', x);

しかし、効果があります

str = '120,501,231.21' 

組み込みのfprintf/sprintfがそれを実行できない場合は、正規表現を使用して、おそらくJava(ロケールベースのフォーマッターがあると思います)を呼び出すか、基本的な文字列挿入操作を使用して、クールなソリューションを作成できると思います。ただし、私はMatlab正規表現またはMatlabからのJavaの呼び出しの専門家ではありません。

関連する質問: Pythonで数千の区切り文字を使用してフロートを印刷するにはどうすればよいですか?

Matlabでこれを行うための確立された方法はありますか?

4

2 に答える 2

14

数千の区切り文字で数値をフォーマットする1つの方法は、Javaロケール対応フォーマッターを呼び出すことです。「ドキュメント化されていないMatlab」ブログの「数値のフォーマット」の記事では、これを行う方法について説明しています。

>> nf = java.text.DecimalFormat;
>> str = char(nf.format(1234567.890123))

str =

1,234,567.89     

ここで、char(…)はJava文字列をMatlab文字列に変換します。

voilà!

于 2012-11-22T12:44:28.130 に答える
8

正規表現を使用した解決策は次のとおりです。

%# 1. create your formated string 
x = 12345678;
str = sprintf('%.4f',x)

str =
12345678.0000

%# 2. use regexprep to add commas
%#    flip the string to start counting from the back
%#    and make use of the fact that Matlab regexp don't overlap
%#    The three parts of the regex are
%#    (\d+\.)? - looks for any number of digits followed by a dot
%#               before starting the match (or nothing at all)
%#    (\d{3})  - a packet of three digits that we want to match
%#    (?=\S+)   - requires that theres at least one non-whitespace character
%#               after the match to avoid results like ",123.00"

str = fliplr(regexprep(fliplr(str), '(\d+\.)?(\d{3})(?=\S+)', '$1$2,'))

str =
12,345,678.0000
于 2012-11-22T13:43:14.217 に答える