问题描述
最近我读了很多关于浮点数表示的内容(包括:的来源如果您尝试:
BigDecimal bd = new BigDecimal(0.1f);
System.out.println(bd);
你会看到0.1f的实际值:0.100000001490116119384765625。
I've read a lot about float representation recently (including this: How To Represent 0.1 In Floating Point Arithmetic And Decimal). Now I understand that 0.1 can't be represented correctly, and when I do this:
System.out.println(2.0f - 1.9f);
I'll never get precise result.
So the question is: How represented 0.1f in the following code in order to print 0.1 correctly?Is that some kind of syntatic sugar?In the article that I above mentioned says: 0.1 represented in memory as 0.100000001490116119384765625. So why I don't get this output for this code:
System.out.println(0.1f);
How does Java deal with this?
System.out.println
performs some rounding for floats and doubles. It uses Float.toString()
, which itself (in the oraclew JDK) delegates to the FloatingDecimal
class - you can have a look at the source of FloatingDecimal#toJavaFormatString()
for gory details.
If you try:
BigDecimal bd = new BigDecimal(0.1f);
System.out.println(bd);
You will see the real value of 0.1f: 0.100000001490116119384765625.
这篇关于为什么0.1正确表示float? (我知道为什么不在2.0-1.9的结果中)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!