【问题标题】:double value 0.0001 will converto 1.0E-4 while inserting into database双值 0.0001 将在插入数据库时​​转换为 1.0E-4
【发布时间】:2014-07-30 01:33:15
【问题描述】:

我想将从网页接收到的双精度值传递给 sqlServer 数据库。 值被包装在一个值对象中。

public class testVO{
    Double value;

    public Double getValue() {
        return value;
    }

    public void setValue(Double value) {
        this.value = value;
    }

}

但是我遇到的问题是当值小于0.0001时,会转换成1.0E-4或者其他科学记数法,导致数据库出错。

我找到的方法是使用BigDecimal.valueOf(testVO.getValue())来解析它。

有没有其他更好的解决方法?


已解决: 不是因为科学记数法的问题,数据库可以同时读取数字和科学。问题是我在将其解析为数据库时使用的实用程序包会将所有值转换为字符串类型,希望不要浪费您的时间!

【问题讨论】:

  • 0.0001和1.0e-4没有区别。怎么放到数据库里的?
  • 我打赌他把它转换成字符串了。
  • 哦,我想我明白了! sqlServer 可以同时读取 0.0001 和 1.0e-4,我在将其解析为 sql 字符串时可能会出错。谢谢!

标签: java sql-server double bigdecimal scientific-notation


【解决方案1】:

双重乘法会得到意想不到的结果。检查下面的代码。

    double a = 0.3;
    double b = 0.1 + 0.1 + 0.1;
    if(a == b) {
        System.out.println("Equal");
    } else {
        System.out.println("Not Equal");
    }

结果将是Not Equal。正如Alberto Bonsanto 所说,使用String 保存在数据库中。 我使用BigDecimal 进行计算过程,并将其作为字符串和(sqlserver 的数字)保存在数据库中。

【讨论】:

  • 谢谢!顺便说一句,您能否解释更多关于“将其保留为数据库中 sqlserver 的字符串和数字”的信息。你的意思是你在sqlSever中保存为数字类型,在其他数据库中保存为字符串?为什么?
  • @Will,当我使用sqlserver时,我使用numeric。对我来说没问题。其他数据库,我还没用。我认为,可能有像numeric 这样的数据类型。例如number。如果你使用String,就可以了。它可能需要以编程方式将String 转换为Number 虎钳签证。
猜你喜欢
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 2019-10-11
相关资源
最近更新 更多