这是我正在看的东西:
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
所以我理解“p”1.15的十进制值不能用二进制表示.
所以大的十进制“bdp”输出对我来说很有意义……这就是浮点数的实际值.
问题1
当浮点“p”转换回字符串以进行输出时(如1.15),舍入的方式/位置(从内部1.149..375到1.15)?
它在文档中指定了哪里? toString javadoc并没有真正的帮助(至少我).
The elements of the types float and double are those values that can
be represented using the IEEE 754 32-bit single-precision and 64-bit
double-precision binary floating-point formats, respectively.
This gives from 6 to 9 significant decimal digits precision (if a
decimal string with at most 6 significant decimal is converted to IEEE
754 single precision and then converted back to the same number of
significant decimal, then the final string should match the original;
问题2
所以这似乎是Java / IEEE 754浮点数应该如何工作?
我保证浮点/字符串转换/表示的准确性达到一定数量的数字(如“p”和“q”),如果超过这个数字,Java将进行一些舍入显示(如“r”) “)?
感谢帮助.