`
yznxing
  • 浏览: 367349 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java中关于浮点运算需要注意的

    博客分类:
  • java
阅读更多

Java 中浮点数( double float )的计算是非精确计算,请看下面一个例子:

     System.out.println(0.05 + 0.01);

     System.out.println(1.0 - 0.42);

     System.out.println(4.015 * 100);

     System.out.println(123.3 / 100);

你的期望输出是什么?可实际的输出确实这样的:

     0.060000000000000005

0.5800000000000001

401.49999999999994

1.2329999999999999

这个问题就非常严重了,如果你有 123.3 元要购买商品,

而计算机却认为你只有 123.29999999999999 元,钱不够,计算机拒绝交易。


 

在《Effective Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal。

原来我们如果需要精确计算,非要用String来够造BigDecimal不可!在《Effective Java》一书中的例子是用String来够造BigDecimal的,但是书上却没有强调这一点,这也许是一个小小的失误吧。


ps:java分类里面没有j2se的分类么。。。

1
0
分享到:
评论
2 楼 bukebuhao 2012-11-12  
不错,还是很实在的
1 楼 michael.ma 2010-04-14  
很好的例子 ,难怪我们项目要求用BigDecimal

相关推荐

    Java中精确的浮点运算操作示例

    主要介绍了Java中精确的浮点运算操作方法,结合具体实例形式分析了java浮点数运算的相关函数、使用技巧与注意事项,需要的朋友可以参考下

    java初学者必看

    最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,...

    21天学通Java-由浅入深

    33 1.9 习题 33 第2章 Java的基本数据类型(精彩视频:38分钟) 34 2.1 数据类型 34 2.1.1 整型 34 2.1.2 浮点型 35 2.1.3 字符型(char) 36 2.1.4 布尔型(boolean) 36 2.2 数据类型间的转换 36 2.2.1 自动转换 ...

    Java 和 C/C++ 的对比试验报告+代码

    设计一个实验,通过 n!的运算,了解不同数据类型在内部存储上的差别。用不同数据类型进行结果值...2. Java 的 数值类型 整型 和 浮点 计算过程中注意类型不能 混用 3. 关注在不同的程序语言环境下,关键语句的差异。

    java计算器程序.doc

    //需要解决的问题,数学的运算都有正负号的出现,在点击等号的时候就会有冲突,应该怎样解决,经验:双精度浮点型数据类型是会像后减一位。0.7会显示成0.69999999 public class app74 { static int i=0; static ...

    Java程序设计基础:自增自减运算符.pptx

    自增/自减运算符 目录 课程导入 掌握自增/自减运算符的计算 能够熟练使用自增/自减运算符 自增/自减运算符 基本规则: 作用:在对一个变量做加 1 或减 1 处理时,可以使用 ++ 或 --。...注意下面几个问题

    javaSE代码实例

    11.1.4 try、catch及finally语句块之间需要注意的问题 201 11.2 异常的层次结构 203 11.2.1 捕获异常 203 11.2.2 未捕获异常 205 11.3 再次抛出异常 206 11.3.1 什么是异常的再抛出 206 11.3.2 显性再...

    Visual C++ 2005入门经典--源代码及课后练习答案

    Ivor Horton还著有Beginning Visual C++ 6、Beginning C Programming和Beginning Java 2等多部入门级好书。 目录 封面 -18 前言 -14 目录 -9 第1章 使用Visual C++ 2005编程 1 1.1 .NET Framework 1 1.2 CLR 2...

    freemarker总结

    这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>... <#else> ... 例子如下: (age>60)>老年人 ...

    C++复习资料之系列

    在下列选项中,全部都合法的浮点型数据的选项为( a,b,d ),全部都不合法的浮点型数据选项是( c )。 (a) -1e3 , 15. , 2e-4 (b) 12.34 , -1e+5 , 0.0 (c) 0.2e-2.5 , e-5 (d) 5.0e-4 , 0.1 , 8.e+2...

    ryu:将浮点数转换为十进制字符串

    主要的实现是在C中进行的,并且到Java的转换最短。 所有算法均已在同行评审的出版物中发表。 在撰写本文时,这些是已知最快的浮点到字符串转换算法。 固定的科学转换例程比sprintf的常规实现快几倍(我们将其与...

    MySQL命令大全

    而Linux中启动时可用“/etc/rc.d/init.d/mysqld start”命令,注意启动者应具有管理员权限。 刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     Ivor Horton是撰著Java、C和C++编程语言图书的杰出作家之一。大家一致认为,他的著作独具风格,无论是编程新手,还是经验丰富的编程人员,都很容易理解其内容。在个人实践中,Ivor Horton也是一名系统顾问。他从事...

    JavaScript基础和实例代码

    1.11 JavaScript与Java、Java applet 1.12 JavaScript的未来如何 1.13 本章小结 第2章 JavaScript语言入门 2.1 编程准备 2.1.1 编程术语 2.1.2 脚本执行顺序 2.1.3 大小写敏感 2.1.4 空白字符 2.1.5 分号 2.1.6 块 ...

    源文件程序天下JAVASCRIPT实例自学手册

    1.11 JavaScript与Java、Java applet 1.12 JavaScript的未来如何 1.13 本章小结 第2章 JavaScript语言入门 2.1 编程准备 2.1.1 编程术语 2.1.2 脚本执行顺序 2.1.3 大小写敏感 2.1.4 空白字符 2.1.5 分号 2.1.6 块 ...

    MYSQL常用命令大全

    而Linux中启动时可用“/etc/rc.d/init.d/mysqld start"命令,注意启动者应具有管理员权限。 刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽...

Global site tag (gtag.js) - Google Analytics