Подтвердить что ты не робот

Как напечатать целое число с разделителем тысяч в Matlab?

Я хотел бы превратить число в строку, используя запятую в качестве разделителя тысяч. Что-то вроде:

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

но с эффектом

str = '120,501,231.21' 

Если встроенный fprintf/sprintf не может этого сделать, я думаю, что крутое решение может быть выполнено с использованием регулярных выражений, возможно, путем вызова Java (который, как я полагаю, имеет некоторый форматтертальный формат), или с помощью базовая операция вставки строки. Тем не менее, я не являюсь экспертом в Matlab regexp или вызове Java из Matlab.

Похожие вопросы: Как напечатать float с разделителями тысяч в Python?

Есть ли установленный способ сделать это в Matlab?

4b9b3361

Ответ 1

Один из способов форматирования чисел с разделителями тысяч - это вызов формата, поддерживающего языковые стандарты Java. В числах форматирования "в блоге" Недокументированный Матлаб" объясняется, как это сделать:

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

str =

1,234,567.89     

где char(…) преобразует строку Java в строку Matlab.

вуаля!

Ответ 2

Здесь решение с использованием регулярных выражений:

%# 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