我正在使用Java编写数学函数,当我尝试将我的结果与ms office excel公式函数进行比较时,两个值的准确性使得my comparison(==)
在双值的情况下失败。
我的结果:
2.3450414545545569的 404E16
MS excel结果:
2.3450414545545569的 4E16
我对它进行了一些研究,发现很少links,但它没有解决我的问题,我不能使用大小数,因为它与我的最终结果不一致。
我无法理解为什么我的函数会显示额外的值(404E16)以及如何将其格式化以产生输出,如(2.34504145455455694E16)
答案 0 :(得分:2)
在您的方法中使用strictfp
。这可能会解决准确性问题。
此link提供了有关strictfp
。
答案 1 :(得分:1)
如果BigDecimal不是一个选项,这是比较双值的好方法:
答案 2 :(得分:0)
您可以在忽略最后一位数字时进行比较:
boolean equals = Math.abs(myResult - msExcelResult) < 1
答案 3 :(得分:0)
如果问题只是格式化问题,您只需要使用适当的格式字符串来输出数字。相当具体的用途取决于您输出数字的具体方式,但DecimalFormat
,格式字符串(System.out.format
)等等都会对您有所帮助。
http://docs.oracle.com/javase/tutorial/java/data/numberformat.html