Inserting a 1000 separator

127 ビュー (過去 30 日間)
joseph Frank
joseph Frank 2013 年 2 月 8 日
編集済み: Stephen23 2023 年 11 月 14 日
Hi, I am building a table in which I need to insert numbers with a comman 1000 separator and two decimal points. For example: A=11201453.21 % should be A=1,1201,453.21 Any hint about how to do it? Best,
  3 件のコメント
joseph Frank
joseph Frank 2013 年 2 月 8 日
yes the resulting expression is not a matlab command. I want to generate A={'1,1201,453.21'} in matlab
Image Analyst
Image Analyst 2013 年 2 月 8 日
My code gives close to that:
A=11201453.21
stringVersionOfA = CommaFormat(A)
cellVersionOfString = {stringVersionOfA}
In the command window:
A =
11201453.21
stringVersionOfA =
11,201,453.21
cellVersionOfString =
'11,201,453.21'
Can you explain why your second group has 4 numbers (1201) instead of 3? And is that the reason why the code I posted earlier does not meet your requirements?

サインインしてコメントする。

採用された回答

Image Analyst
Image Analyst 2013 年 2 月 8 日
Here's a function I've used:
%=====================================================================
% Takes a number and inserts commas for the thousands separators.
function [commaFormattedString] = CommaFormat(value)
% Split into integer part and fractional part.
[integerPart, decimalPart]=strtok(num2str(value),'.');
% Reverse the integer-part string.
integerPart=integerPart(end:-1:1);
% Insert commas every third entry.
integerPart=[sscanf(integerPart,'%c',[3,inf])' ...
repmat(',',ceil(length(integerPart)/3),1)]';
integerPart=integerPart(:)';
% Strip off any trailing commas.
integerPart=deblank(integerPart(1:(end-1)));
% Piece the integer part and fractional part back together again.
commaFormattedString = [integerPart(end:-1:1) decimalPart];
return; % CommaFormat
  2 件のコメント
Ursel Thomßen
Ursel Thomßen 2020 年 9 月 15 日
編集済み: Ursel Thomßen 2020 年 9 月 15 日
This works perfectly! I even exchanged perdiod and comma and can get German numberformat :-)
... As long as I enter numbers for value. Can anybody tell me, what do I need to change if I want to enter variables (1x1) for value?
Thank you in advance!
Image Analyst
Image Analyst 2020 年 9 月 15 日
Not sure what you want to enter. It can already take constants
[commaFormattedString] = CommaFormat(1234567)
or variables
value = 12345678;
[commaFormattedString] = CommaFormat(value)
Do you want to enter a string? If so, you have to convert it to a numerical value first.
value = str2double(str);

サインインしてコメントする。

その他の回答 (2 件)

Jan
Jan 2013 年 2 月 8 日
Please take the time to search in the forum at first before posting a new question:

Toshiaki Takeuchi
Toshiaki Takeuchi 2023 年 11 月 14 日
Using pattern
vec = 123456789;
txt = string(vec);
pat1 = lookBehindBoundary(digitsPattern); % (?<=\d)
pat2 = asManyOfPattern(digitsPattern(3),1); % (\d{3})+
pat3 = lookAheadBoundary(pat2+lineBoundary("end")); % (?=(\d{3})+$)
pat4 = pat1+pat3; % (?<=\d)(?=(\d{3})+$)
replace(txt,pat4,",")
ans = "123,456,789"
  1 件のコメント
Stephen23
Stephen23 2023 年 11 月 14 日
編集済み: Stephen23 2023 年 11 月 14 日
Using the OP's example value:
vec = 11201453.21;
txt = string(vec);
pat1 = lookBehindBoundary(digitsPattern); % (?<=\d)
pat2 = asManyOfPattern(digitsPattern(3),1); % (\d{3})+
pat3 = lookAheadBoundary(pat2+lineBoundary("end")); % (?=(\d{3})+$)
pat4 = pat1+pat3; % (?<=\d)(?=(\d{3})+$)
replace(txt,pat4,",")
ans = "11201453.21"

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by