本文介绍了为什么0.1正确表示float? (我知道为什么不在2.0-1.9的结果中)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近我读了很多关于浮点数表示的内容(包括:的来源

如果您尝试:

  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的结果中)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 23:01