Java如何将浮点数转换为字符串

这是我正在查看的内容:

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”输出对我来说非常有意义……这是浮点数的实际值。

当浮点数“ p”转换回字符串以进行输出(如1.15)时,如何四舍五入(从内部1.149..375到1.15)?

在文档中的什么地方指定?toString javadoc并没有真正帮助(至少对我来说)。

我在语言规范中确实看到了这一点:

float和double类型的元素分别是可以使用IEEE 754 32位单精度和64位双精度二进制浮点格式表示的值。

维基百科的IEEE 754文章给出了以下内容:

这给出了6到9个有效十进制数字的精度(如果将具有最多6个有效十进制的十进制字符串转换为IEEE

754单精度,然后再转换回相同数量的有效十进制数字,则最终字符串应与原始字符串匹配;

看来,这应该就是Java / IEEE 754浮点数应该起作用的方式吗?

我可以保证浮点数/字符串转换/表示的精确度达到一定位数(例如“ p”和“ q”),并且如果超出该位数,Java将对显示进行四舍五入(例如“ r” ”)?

感谢帮助。

回答:

从JLS,4.2.4。浮点运算:

Java编程语言要求浮点运算的行为就像每个浮点运算符将其浮点结果四舍五入到结果精度一样。不精确的结果必须四舍五入到最接近无限精确结果的可表示值;如果两个最接近的可表示值相等地接近,则选择其最低有效位为零的那个。这是IEEE

754标准的默认舍入模式,称为“最接近舍入”。

在将浮点值转换为整数(第5.1.3节)时,Java编程语言使用朝零取整的方式,在这种情况下,整数的作用就像被截断了一样,舍弃了尾数位。向零舍入会在其结果处选择格式值,该值最接近且幅度不超过无限精确的结果。

以上是 Java如何将浮点数转换为字符串 的全部内容, 来源链接: utcz.com/qa/431779.html

回到顶部