在java中添加双值时出错

在java中添加双值时出错,java,Java,我有以下代码: double d1=1000000000000000000.0; //which is equivalent to 1.0e^18 double d2=3434.0; System.out.println(d1+d2); 打印10000000000003460而不是10000000000003434。有什么问题吗?@Anthony Pegram是对的。如果您需要这样的精度,请使用BigDecimal。@Anthony Pegram是正确的。如果需要这样的精度,请使用BigDec

我有以下代码:

double d1=1000000000000000000.0; //which is equivalent to 1.0e^18
double d2=3434.0;
System.out.println(d1+d2);

打印10000000000003460而不是10000000000003434。有什么问题吗?

@Anthony Pegram是对的。如果您需要这样的精度,请使用BigDecimal。

@Anthony Pegram是正确的。如果需要这样的精度,请使用BigDecimal。

问题在于双精度类型本身,它不支持所需的精度。您应该使用BigDecimal。

问题在于双精度类型本身,它不支持所需的精度。您应该使用BigDecimal。

所需的存储数量超出预期。在这样的情况下使用大小数

import java.math.BigDecimal;//remember to import this
  public class UseBigDecimal{

   public static void main(String[]args){
   double d1=1000000000000000000.0;
   double d2=3434.0;

   BigDecimal bVal1 = new BigDecimal(d1);
   BigDecimal bVal2 = new BigDecimal(d2);

   BigDecimal sum = bVal1.add(bVal2);//you call the add() method not bVal1+bVal2
   System.out.println ("Sum of BigDecimals " +sum.toString());
   //need to call toString()
   }

  }

所需的存储数量超出预期。在这样的情况下使用大小数

import java.math.BigDecimal;//remember to import this
  public class UseBigDecimal{

   public static void main(String[]args){
   double d1=1000000000000000000.0;
   double d2=3434.0;

   BigDecimal bVal1 = new BigDecimal(d1);
   BigDecimal bVal2 = new BigDecimal(d2);

   BigDecimal sum = bVal1.add(bVal2);//you call the add() method not bVal1+bVal2
   System.out.println ("Sum of BigDecimals " +sum.toString());
   //need to call toString()
   }

  }

双人床没有你需要的精度。有效数字不足。@AnthonyPegram-这是一个答案,而不是一个注释,因为你是正确的。@AnthonyPegram-还提供了一个替代方案。双精度没有你需要的精度。没有足够的有效数字。@AnthonyPegram-回答,而不是评论,因为你是正确的。@AnthonyPegram-还提供了一个替代方案。只是好奇,但为什么他得到的结果比预期的要大?缺少精度是否会导致舍入误差?是的,缺少精度。double类型可用于表示任何32位整数,但当它超出此范围时,精度会降低,尽管您可以表示某些非常大的值。只是好奇,但为什么他得到的结果比预期的要大?缺少精度是否会导致舍入误差?是的,缺少精度。double类型可用于表示任何32位整数,但当它超出此范围时,精度会降低,尽管可以表示某些非常大的值。