Hey!
I hope I have a simple question, I just couldn't figure it out.
I have several numbers which I want to be converted to string quite literally:
12.000 -> '12.000'
4.0 -> '4.0'
34.760000 -> '34.760000'
As you can see, I cannot simply pad zeros, since that highly depends on how many zero are given with the number.
Does anyone know how to do this?

8 件のコメント

per isakson
per isakson 2021 年 4 月 24 日
"how many zero are given with the number" What does that mean?
sprintf( '%6.3f', 12 )
ans = '12.000'
Ganesh Gebhard
Ganesh Gebhard 2021 年 4 月 24 日
編集済み: Ganesh Gebhard 2021 年 4 月 24 日
Well I mean that sometimes there are 5 zeros behind the comma and sometimes only two. The string should contain the exact same amount of zeros behind the comma as the input number.
per isakson
per isakson 2021 年 4 月 24 日
編集済み: per isakson 2021 年 4 月 24 日
Sorry, I don't understand how to know whether there should be two or five zeros after the decimal point in a number.
Clayton Gotberg
Clayton Gotberg 2021 年 4 月 24 日
Where are you getting these numbers from? If they come from MATLAB I don't think it's possible to do that as it sees no difference between 12.000 and 12. However, MATLAB shouldn't be giving you numbers with inconsistent precision.
Stephen23
Stephen23 2021 年 4 月 24 日
"...since that highly depends on how many zero are given with the number."
Numeric data types do not explicitly store the number of decimal trailing zeros, so your examples do not correspond to the reality of how computers store numeric values.
"Does anyone know how to do this?"
You could store the required precision separately, and then use that information when converting to string.
dpb
dpb 2021 年 4 月 24 日
I would presume from "sometimes there are 5 zeros behind the comma and sometimes only two" that the source of the numbers must be a text file containing these. If that is the case, read them as text instead of as numeric to retain the wanted form, then as Stephen C suggests above parse the string to determine and store the desired precision if it is necessry to be able to reproduce this later. A stuct array might be a way to store such as a composite object.
Examples of the way these are generated and to be used might lead to more elegant solutions.
Ganesh Gebhard
Ganesh Gebhard 2021 年 4 月 26 日
I solved it quickly by providing the number of zeros after the comma as a variable, so that for each number the user has to input the numbers of zeros as well. Maybe not the best way, but it did the trick for the iteration.
Scott MacKenzie
Scott MacKenzie 2021 年 4 月 26 日
編集済み: Scott MacKenzie 2021 年 4 月 26 日
Is the idea to replicate MATLAB's format for numbers appearing the command window? In this case, here's an idea that might help (but requires R2021a). Use fmt = format to get the current display format. fmt is a DisplayFormatOptions object. Query the DisplayFormatOptions object and respond accordingly:
format short
x = 5/4
fmt = format;
fmt.NumericFormat
% "short", therefore 4 digits after decimal point
format long
x
fmt = format;
fmt.NumericFormat
% "long", therefore 15 digits after decimal point
Output:
x =
1.2500
ans =
"short"
x =
1.250000000000000
ans =
"long"

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

 採用された回答

Jan
Jan 2021 年 4 月 26 日

1 投票

If the values are stored as floating point numbers in double or single format, they do not have trailing zeros. Trailing zeros after the decimal point are not defined mathematically, as well as leading zeros before the point.
So if you reall have a 12.000 anywhere, this is either a char vector or string, or this comes from choosing a specific output format:
x = 12
x = 12
format long
x
x =
12
format shortEng
x
x =
12.0000e+000
% Or explicitly:
fprintf('%d\n', x)
12
fprintf('%f\n', x)
12.000000
fprintf('%.3f\n', x)
12.000

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeCharacters and Strings についてさらに検索

製品

タグ

質問済み:

2021 年 4 月 24 日

回答済み:

Jan
2021 年 4 月 26 日

Community Treasure Hunt

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

Start Hunting!

Translated by