我是Java的新手,并寻求一些帮助。我有一个数组列表如下:
double number[]={19.1904990290,27.2646233344,51.4850317134}
我使用以下代码对数组列表求和并将其打印到控制台:
int sumLeft = 0;
System.out.println("Contents of leftside: " + number);
for(double i: number) sumLeft += i;
System.out.println("sum(left) = " + sumLeft);
我的结果是97.我的问题是如何才能实现这一点,所以我的答案是正确的?
答案 0 :(得分:1)
将sumLeft
定义为double
。这将解决您的问题。
引擎盖sumLeft += i;
做了像
sumLeft = sumLeft + (int)i
;
因此你看到了问题。
答案 1 :(得分:0)
将sumLeft定义为double将解决您的问题。
请注意,虽然计算机术语中的双打精度有限,但会以奇怪的方式表示您的数字。如果精度很重要,则需要使用BigDecimal
等内容。
http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding
答案 2 :(得分:0)
正如您可能知道的那样,int
表示"整数",即没有小数分量的整数。语言有时会进行隐式类型转换,因此当存储值的变量是int
时,当数字类型为double
时,小数点后面的部分会被切断。< / p>
正如其他人所说,将sumLeft
改为双倍会避免这种情况。