【发布时间】:2011-07-20 01:37:53
【问题描述】:
我目前正在用 java 编写一个计算器程序。这是我的第一个java程序,我习惯了c++。
我注意到 java 中的双精度与 c++ 中的双精度完全不同。
在 java 和 c++ 中试试这个
4.1*3
那/.1
应该是
12.3 然后 123,c++ 给出了这个结果,但是 java 给出了
12.299999999999999 和 122.99999999999999
我怎样才能像在 c++ 中使用双打一样进行数学运算,我知道在程序中使用 12.299999999999999 与 12.3 相比没有任何区别,但是当用户阅读数字时,这非常难看。我已经研究过 BigDecimal 类,但我不能用那个类做三角函数和对数等等
【问题讨论】:
-
真的,你很可能在 C++ 中遇到同样的问题。这不是 java 的问题,而是 IEEE 双打的工作方式。如果它恰好在 C++ 中为您工作,那么您很幸运。阅读en.wikipedia.org/wiki/Floating_point 的“IEEE 754:现代计算机中的浮点”部分。也许您缺少的只是输出格式,但这并不能解决您将遇到的问题,除非您首先了解获得 12.29999999999 而不是 12.3 的原因。
-
我知道在 C++ 中你可以设置双输出的精度。我确信你可以在 Java 中做一些事情。
-
每位计算机科学家都应该知道的浮点运算知识cr.yp.to/2005-590/goldberg.pdf
标签: java c++ math calculator double-precision