How do I add commas to numbers using fprintf?
152 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello,
How do I add commas to numbers using fprintf? My customer wants me to write out tables and have commas in the numbers to better read it. For instance, 123456789.0 would be written out as 123,456,789.0. Thanks.
Best regards,
Bill Rooker
0 commentaires
Réponse acceptée
Stephen23
le 8 Mar 2017
Modifié(e) : Stephen23
le 15 Sep 2023
fprintf cannot do that, but you will find several FEX submissions that can create a string with commas as thousands separators:
If you read the comments to those submissions you will also find several improvements to consider.
Another easy one-line approach:
str = ["1234567890.123456789";"-1234567890";"0"]
str = regexprep(str,'(?<!\.\d*)\d{1,3}(?=(\d{3})+\>)','$&,')
4 commentaires
Stephen23
le 15 Sep 2023
Modifié(e) : Stephen23
le 15 Sep 2023
The only resources I really use are the MATLAB documentation:
etc.
You can find some online tutorials etc that explain regular expression concepts** but these often are based on Perl or JavaScript or Python or whatever regular expressions (i.e. not the same details) so once you really need to know the details then the only place to look is the MATLAB documentation. Be prepared to read those pages many times.
If you want to experiment then you might find this useful:
** as well as many websites offering all kinds of automagic things with regular expressions.
Dyuman Joshi
le 16 Sep 2023
I tried working with the documentation pages of regexp() and regexprep(), but haven't been successful with it, as they are not clear/specific enough to me and do not provide sufficient examples to understand the functionality properly.
Thank you very much for the links, I didn't know about these pages, they are what I was looking for!
I have also tried a few online tutorials, but as you mentioned, the functionality of regexp() in other languages are different than in MATLAB.
I will also look into the FEX submission you have link, it does look very extensive, but for now, I will start from the basics with the documentation pages you linked.
Once again, Thank you!
Plus de réponses (4)
Ted Shultz
le 13 Juin 2018
function numOut = addComma(numIn)
jf=java.text.DecimalFormat; % comma for thousands, three decimal places
numOut= char(jf.format(numIn)); % omit "char" if you want a string out
end
Hope that helps! --ted
5 commentaires
Daven Gooden
le 10 Nov 2020
@Ted Shultz: Spot on! Very clean and easy to understand/use! Thank you very mutch!
Jim Svensson
le 15 Fév 2021
I feel that in 2021 this functionality should be supported by sprintf/fprintf.
3 commentaires
Dyuman Joshi
le 15 Sep 2023
@Jim Svensson If you want to have a functionality implemented in MATLAB, you can raise a feature request for it.
I believe you will need a strong justification to convince TMW as to why they should implement it.
Image Analyst
le 16 Sep 2023
It would certainly be a convenience if they had a letter to do that conversion, like p or whatever (some unused letter), like
x = 12345678.912345
fprintf('Number = %p.\n', x);
'12,345,678.912'
Image Analyst
le 15 Sep 2023
See my attached utility function that inserts commas to make a string out of a number. Then in your fprintf you print the string with %s instead of %d or %f. For example:
number = 1234567;
fprintf('The number is %s.\n', CommaFormat(number));
0 commentaires
Toshiaki Takeuchi
le 14 Nov 2023
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,",")
1 commentaire
Stephen23
le 14 Nov 2023
vec = 1234.56789
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,",")
Voir également
Catégories
En savoir plus sur Characters and Strings dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!