在java中设置double的精度

时间:2014-08-06 15:18:20

标签: java

 DecimalFormat df = new DecimalFormat("#.000000");
 int a[] = { 2, 2, 3, 3, 4, 4 };
 double sum = 0.000000;
 for (int i = 0; i < a.length; i++)
 {
    sum = sum + (double) a[i];
 } 
 output1=Double.valueOf(df.format(sum / a.length));

其中sum/a.length值为3. output1是双变量。现在我想要的结果是3.000000,它必须存储在双变量output1中,但我无法得到它。

4 个答案:

答案 0 :(得分:2)

虽然在某些情况下它可能会起作用,但通常无法确定/强制double值或实际上任何IEEE floating point数字的小数精度。

如果要在Java中使用小数精度,请使用BigDecimal。如果您使用的数字代表金钱,这就更为重要。

如果近似结果足够好(并且计算结果很多),您可以使用double但请注意它是二进制浮点数并且精确舍入到小数可能不会永远是可能的。

答案 1 :(得分:1)

原始类型double是实数的近似值,(负)幂的序列为2.

因此十进制表示法0.2 = 0 * 2 -1 + ... + 1 * 2 -4 + ...因为需要一个错误基数2中的无限序列。

如果想要一个具有该值的精度,则需要BigDecimal:

BigDecimal oneFifth = new BigDecimal("0.200"); // Precision/scale 3
BigDecimal hundredPlusOnefifth =
      oneFifth.multiply(BigDecimal.valueOf(501)); // 100.200

在构造函数中使用String,BigDecimal可以设置精度。

虽然在BigDecimal中编写表达式并不是那么好。

双人可能会活着,同时在代码中的适当位置仔细舍入。总会出现一个小错误,输出需要一个格式化程序,因为丢失了数字位数。

答案 2 :(得分:0)

看起来sumint并且您有整数除法的结果(因为a.lengthint)。只需将其中一个值乘以1.0:

output1 = Double.valueOf(df.format((sum * 1.0) / a.length));

使用您编辑的代码,您的问题不在于获取output1的值,而是如何显示它。不要直接打印output1,而是使用您之前使用的DecimalFormat

System.out.println(df.format(output1));

答案 3 :(得分:0)

3.03.00000的值在双变量中是相同的。打印时,请按照您想要的格式进行格式化:

 System.out.println( df.format( output1 ) );