快速业务通道

Java理论与实践: 您的小数点到哪里去了? - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
cimal(double) 构造函数,因为如果不了解它 ,会在计算过程中产生舍入误差。请使用基于整数或 String 的构造函数。

构造 BigDecimal 数

对于 BigDecimal ,有几个可用的构造函数。其中一个构造函数以双精度浮 点数作为输入,另一个以整数和换算因子作为输入,还有一个以小数的 String 表示作为输入。要小心使用 BigDecimal(double) 构造函数,因为如果不了解它 ,会在计算过程中产生舍入误差。请使用基于整数或 String 的构造函数。

如果使用 BigDecimal(double) 构造函数不恰当,在传递给 JDBC setBigDecimal() 方法时,会造成似乎很奇怪的 JDBC 驱动程序中的异常。例如 ,考虑以下 JDBC 代码,该代码希望将数字 0.01 存储到小数字段:

PreparedStatement ps =    connection.prepareStatement("INSERT INTO Foo SET name=?, value=?");   ps.setString(1, "penny");   ps.setBigDecimal(2, new BigDecimal(0.01));   ps.executeUpdate();

在执行这段似乎无害的代码时会抛出一些令人迷惑不解的异常(这取决于具 体的 JDBC 驱动程序),因为 0.01 的双精度近似值会导致大的换算值,这可能 会使 JDBC 驱动程序或数据库感到迷惑。JDBC 驱动程序会产生异常,但可能不 会说明代码实际上错在哪里,除非意识到二进制浮点数的局限性。相反,使用 BigDecimal("0.01") 或 BigDecimal(1, 2) 构造 BigDecimal 来避免这类问题 ,因为这两种方法都可以精确地表示小数。

结束语

在 Java 程序中使用浮点数和小数充满着陷阱。浮点数和小数不象整数一样 “循规蹈矩”,不能假定浮点计算一定产生整型或精确的结果,虽然它们的确“ 应该”那样做。最好将浮点运算保留用作计算本来就不精确的数值,譬如测量。 如果需要表示定点数(譬如,几美元和几美分),则使用 BigDecimal。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号