Effacer les filtres
Effacer les filtres

transfer numerical data end with 'M' and 'B'

2 vues (au cours des 30 derniers jours)
Yu Li
Yu Li le 7 Mar 2024
Modifié(e) : Stephen23 le 7 Mar 2024
I have a numerical data that is for example, 1234567, I can translate to "%f" and "%e" format using Matlab, but I would like to transfer the data to something like this: 1.23M, where "M" represent "million", simliar if the data is even larger, over billion, I can transfer it as "1.2b".
is it possible to do this is Matlab?
  4 commentaires
Dyuman Joshi
Dyuman Joshi le 7 Mar 2024
Modifié(e) : Dyuman Joshi le 7 Mar 2024
No, there is no official MATLAB command that does that. You will have to write the code for it.
You can utilize the hint that I provided above.
P.S - Isn't the symbol for billion supposed to be B and not b?
Stephen23 le 7 Mar 2024
Modifié(e) : Stephen23 le 7 Mar 2024
As an alternative, you could download and try using my function NUM2WORDS():
It covers the entire DOUBLE range, has many options, and has been extensively tested:
ans = 'one point two three million'
Note that if you only use the first letter you will have a problem when you reach Quadrillion and Quintillion.
Or you could download my function NUM2SIP():
It provides all of the SI prefixes, and has also been extensively tested:
ans = '1.23 M'

Connectez-vous pour commenter.

Réponses (1)

Chunru le 7 Mar 2024
You can define your own function. Here is an example:
ans = "12.345678M"
ans = "-12.345678M"
ans = "-1.238000k"
ans = "-1234.567890b"
function s = sprintfkmb(a)
str = ["", "k", "M", "b"];
e = floor(log10(abs(a)));
e3 = floor(e/3);
e3 = min(e3, 3);
s = sprintf("%.6f%s", a/(10^(e3*3)), str(e3+1) );

Community Treasure Hunt

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

Start Hunting!

Translated by