这就是我在看的内容:
float p=1.15f;
BigDecimal bdp=new BigDecimal(p);
float q=1.1499999f;
float r=1.14999999f;
System.out.println(p); //1.15
System.out.println(bdp); //1.14999997615814208984375
System.out.println(q); //1.1499999
System.out.println(r); //1.15
Run Code Online (Sandbox Code Playgroud)
所以我理解"p"1.15的十进制值不能用二进制表示.
因此,大的十进制"bdp"输出对我来说非常有意义......这就是浮点数的实际值.
问题1
当浮点数"p"转换回字符串输出(如1.15)时,舍入的方式/位置(从内部1.149..375到1.15)?
它在文档中指定了哪里?toString javadoc并没有真正的帮助(至少我).
我确实在语言规范中看到了这一点:
float和double类型的元素是可以分别使用IEEE 754 32位单精度和64位双精度二进制浮点格式表示的值.
维基百科的IEEE 754文章给出了这样的结论:
这给出了6到9个有效十进制数字精度(如果一个十进制字符串最多有6个有效小数被转换为IEEE 754单精度,然后转换回相同数量的有效小数,则最终字符串应与原始字符串匹配;
问题2
因此,似乎Java/IEEE 754浮点数应该如何工作?
我保证浮点/字符串转换/表示的准确性达到一定数量的数字(如"p"和"q"),如果超过该位数,Java将进行一些舍入显示(如"r") ")?
感谢帮助.