当前位置: 首页 > 面试题库 >

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

聂奇
2023-03-14
问题内容

这是我正在查看的内容:

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并没有真正帮助(至少对我来说)。

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

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

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

这给出了6到9个有效十进制数字的精度(如果将具有最多6个有效十进制的十进制字符串转换为IEEE
754单精度,然后再转换回相同数量的有效十进制数字,则最终字符串应与原始字符串匹配;

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

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

感谢帮助。


问题答案:

从JLS,4.2.4。浮点运算:

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

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



 类似资料:
  • 我看到的是: 所以我知道“p”1.15的十进制值不能用二进制来精确表示。 所以大的十进制“bdp”输出对我来说非常有意义……这是浮点数的实际值。 问题 1 当浮点数“p”转换回字符串以进行输出(如 1.15)时,该舍入如何/在何处发生(从内部 1.149..375 值转换为 1.15)? 它在文档中的哪个位置指定?托斯特林爪哇并没有真正的帮助(至少我)。 我确实在语言规范中看到了这一点: 浮点和双

  • 问题内容: 正如标题所说。我不认为有可能这样做,但如果可以告诉我。 这是我正在编写的bukkit(minecraft服务器)插件所必需的。我要执行一个命令:tnt [power]。电源是我想转换为浮点数的返回字符串。 谢谢 问题答案: 用于进行转换。 和之间的区别只是回报。如果需要(对象),请使用前者;如果要数字,请使用后者。

  • 问题内容: http://golang.org/pkg/strconv/ http://play.golang.org/p/4VNRgW8WoB 如何将浮点数转换为字符串格式?这是google游乐场,但未获得预期的输出。(2e + 07)我想得到“ 21312421.213123” 请帮助我从浮点数中获取字符串。谢谢 问题答案: 试试这个 如果只想获得尽可能高的位数精度,则特殊精度-1使用所需的最

  • 我正在尝试将一个包含“4,3”这样的数字的列转换为数据类型string。 ValueError:无法将字符串转换为浮点数:“4,3”

  • 问题内容: 我有一个表,其中包含纬度和经度值,这些值存储为要转换为的字符串()。 但是,使用或似乎没有一种直接的方法。 如何轻松转换这些列?这是一次转换。 问题答案: 原来我只是在描述上不见了: 将值转换为DECIMAL数据类型。可选参数M和D指定十进制值的精度(M指定位数的总数)和小数位数(D指定小数点后的位数)。默认精度是小数点后两位。 因此,以下查询有效:

  • 如何将字符串百分比转换为浮点小数?我写了这段代码,当我运行它时,我只会返回一些错误,如“无法将系列转换为”