Как напечатать целое число с разделителем тысяч в Matlab?
Я хотел бы превратить число в строку, используя запятую в качестве разделителя тысяч. Что-то вроде:
x = 120501231.21;
str = sprintf('%0.0f', x);
но с эффектом
str = '120,501,231.21'
Если встроенный fprintf
/sprintf
не может этого сделать, я думаю, что крутое решение может быть выполнено с использованием регулярных выражений, возможно, путем вызова Java (который, как я полагаю, имеет некоторый форматтертальный формат), или с помощью базовая операция вставки строки. Тем не менее, я не являюсь экспертом в Matlab regexp или вызове Java из Matlab.
Похожие вопросы: Как напечатать float с разделителями тысяч в Python?
Есть ли установленный способ сделать это в Matlab?
Ответы
Ответ 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