Why does num2str() of 138.97 return 138.96999999999999886?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
I use num2str to set parameters into a Simulink model via set_param.
The parameters are sometimes irrational fractions (hence num2str(parameter,20)) makes sense, but some other times they are simpler values like 138.9. Therefore, to "work with all cases", I thought of using 20 digits all the time.
Then I noticed that num2str(parameter,20) does not add just zeros, but extra decimals. For example:
K>> A = 138.97;
K>> num2str(A,20)
ans =
'138.96999999999999886'
K>> num2str(A,'%20.20f')
ans =
'138.96999999999999886313'
Why does this happen?
I would expect that either setting the number of digits or the format spec would just fill the string with extra zeros.
0 comentarios
Respuesta aceptada
dpb
el 10 de Ag. de 2022
Editada: dpb
el 10 de Ag. de 2022
Wrong expectation for floating point numbers -- short story is if a fraction is not exactly representable by 1/2^n, it'll not be able to be stored exactly and so what you get is the closest representation that can be stored.
All the skinny is in <Goldberg, What Every Computer Scientist...>>
If you want only n digits of precision past the decimal point, set that in the format string.
I don't know anything about Simulink; can't you pass the actual variable into it, not a string? Then you get the closest binary representation without any rounding, whatever the value. All it's going to do with the string is convert it back to internal representation, anyway.
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre String en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!