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

使用千位分隔符格式化数字的一种方法是调用 Java 语言环境感知格式化程序。“未记录的 Matlab”博客中的“格式化数字”文章解释了如何执行此操作:

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

str =

1,234,567.89     

其中char(…)将 Java 字符串转换为 Matlab 字符串。

瞧!

于 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 回答