【问题标题】:Float.valueOf(String arg) rounding off issue in JavaJava 中的 Float.valueOf(String arg) 舍入问题
【发布时间】:2019-05-15 09:41:01
【问题描述】:

人, 我在我的应用程序中偶然发现了一个基本问题,我试图将字符串值转换为其对应的浮点值:

Float val = obj.getFloat("220293.43") ;
System.out.println(val);

getFloat() 的定义:

Float getFloat(String arg)
{

return Float.valueOf( arg ) ;

}

现在的问题是,当我打印转换后的浮点值时,它给了我:

220293.44  

这显然是不正确的。谁能帮我解决这个问题,我读了一些关于这个的内容,我怀疑这个问题是因为 float 支持 4 字节数据的能力有限,但我需要确认并解释为什么会发生这种情况。谢谢你的时间.

【问题讨论】:

    标签: java floating-point type-conversion


    【解决方案1】:

    这种行为通常被称为浮点精度问题。并非所有实数都可以用浮点值精确表示,因此存在类似于您所描述的舍入问题。如果您正在比较看起来相同但内部表示不同的值,这尤其奇怪。

    Floating-point arithmetic, Accuracy

    在您的情况下是否需要使用 Float?

    【讨论】:

    • 我知道并不是所有的实数都不能用浮点数精确表达,能解释一下为什么它在“220293.43”这个特殊场景中会失败吗?
    • 您刚刚找到了一个与您选择的数字完全一致的浮点精度问题的具体示例 - 如果您深入研究该数字的二进制表示,您将自己找到解决方案...
    【解决方案2】:

    float 的精度只有 24 位。

    如果需要浮点值,必须使用双精度

    【讨论】:

    • 我知道 double 正在解决这个问题,我想了解为什么它在“220293.43”场景中失败。即使我使用 '220293.430' 结果也是一样的。
    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2013-09-18
    • 1970-01-01
    • 2013-04-12
    • 2011-04-27
    相关资源
    最近更新 更多