【问题标题】:very high float value changing to infinity while retrieving from database从数据库检索时非常高的浮点值变为无穷大
【发布时间】:2015-09-02 11:16:56
【问题描述】:

我的数据库中有一个条目

select item_numeric_value from Item_Allowed_Values where id=761 

item_numeric_value 的数据类型在我的数据库中是 float

我得到的结果是1.11111111111111E+49

当我在 java 中检索字符串中的这个值时,我得到无穷大。

我有什么遗漏或做错了吗?

【问题讨论】:

  • 你使用什么服务器版本? sql server 还是 mysql!?
  • "retrieve this value in java in a string",有什么具体原因要在字符串中获取数值吗?

标签: java mysql sql-server hibernate jpa


【解决方案1】:

您应该使用double 而不是float

    // Float.MAX_VALUE = 3.4028234663852886E38f
    float f = Float.parseFloat("1.11111111111111E+49");
    System.out.println("f=" + f);   // -> f=Infinity

    // Double.MAX_VALUE = 1.7976931348623157E308
    double d = Double.parseDouble("1.11111111111111E+49");
    System.out.println("d=" + d);   // -> d=1.11111111111111E49

【讨论】:

  • 我会避免使用双精度类型。 Joshua Bloch 的“Effective Java”解释了为什么应该使用 BigDecimal 而不是 double。这一章被称为“如果需要确切的答案,请避免浮动和加倍”(本书第二版中的第 48 条)。它有一些例子展示了双打如何轻易破坏结果。
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 2010-11-03
相关资源
最近更新 更多