2017-06-02 125 views
0

帮助,我将与负数
的样本程序的双值时,表明该问题的问题:浮点运算错误

double newX = 850.0; 
    double delta = -1.6994427191177073E12; 
    double total = delta + newX; 
    System.out.println("newX:" + newX); 
    System.out.println("delta:" + delta); 
    System.out.println("total:" + total); 

,但给定输出是:

newX:850.0 
delta:-1.6994427191177073E12 
total:-1.6994427182677073E12 

我期望总价值在“848.30055729”左右。如何处理这个计算?

问候,

丹尼斯

+11

你知道'E'的含义是什么,在那个大数字的末尾? –

回答

4

的计算是正确的。

从科学记数法转换你的电话号码,让我们开始

-1.6994427191177073E12 

为十进制定点表示:

-1699442719117.7073 

这是因为E12意味着到E左边的数字乘以10 。

一旦执行加法,这个数字和850.0的,你得到的结果

-1699442718267.7073 

一旦通过将小数点一路左其转换为科学记数法,你得到的印刷结果通过你的程序。

+0

对不起,我没有意识到“E”代表指数,谢谢! :) –

+0

本教程解释说,对于http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,您可能还记得,从您对教程的研究和Java语言规范(JLS)请参阅http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.2。阅读精细手册。 –