如何提高Java计算精度

如何提高Java计算精度,java,Java,在某些情况下,我需要用Java进行非常精确的计算,但它总是会出现一些意想不到的错误。如何避免这些错误或将错误保持在可接受的范围内 e、 g public static void main(String[] args) throws Exception { double x = 0.0; while (x <= 1.0){ System.out.println(x); x += 0.1; System.out.println("

在某些情况下,我需要用Java进行非常精确的计算,但它总是会出现一些意想不到的错误。如何避免这些错误或将错误保持在可接受的范围内

e、 g

public static void main(String[] args) throws Exception {
    double x = 0.0;
    while (x <= 1.0){
        System.out.println(x);
        x += 0.1;
        System.out.println("add 0.1");
    }
}



- the result will be 

   0.0 add 0.1
   0.1 add 0.1
   0.2 add 0.1
   0.30000000000000004 add 0.1
   0.4 add 0.1
   0.5 add 0.1
   0.6 add 0.1
   0.7 add 0.1
   0.7999999999999999 add 0.1
   0.8999999999999999 add 0.1
   0.9999999999999999 add 0.1
publicstaticvoidmain(字符串[]args)引发异常{
双x=0.0;

而(x在这些情况下,您应该使用
BigDecimal
。它可以避免使用
float
double
时出现的各种偏差

欲了解更多信息


在这些情况下,您应该使用
BigDecimal
。它可以避免使用
float
double
时出现的各种偏差

欲了解更多信息


在打印时,您可能只需要格式化双精度字符,而不是使用
BigDecimal

将println替换为
printf(“%.1f\n”,x);
,您将获得所需的输出


当您在复杂的计算过程中(例如涉及金钱时)绝对需要精确的精度时,需要使用
BigDecimal

在打印时,您可能只需要格式化double,而不是使用
BigDecimal

将println替换为
printf(“%.1f\n”,x);
,您将获得所需的输出


当您在复杂的计算过程中(例如涉及金钱时)绝对需要精确的精确度时,需要使用
BigDecimal
.

什么是可接受的范围?你可以参考这个:什么是可接受的范围?你可以参考这个:当人们被未格式化的双精度输出搞糊涂时,BigDecimal通常有点过分了。在第一行,OP说,“在某些情况下,我需要用Java进行真正精确的计算。”。我怀疑他是否真的这么做。他肯定不是在银行业工作。我们应该坚持回答这个问题,而不是假设。我已经按照问题回答了。我还提供了一些链接,OP可以从中找到更多信息。其中一个链接明确指出,使用
BigDecimal
速度慢,使用起来更棘手。但你是谁我们需要决定什么应该用在哪里?OP需要一些帮助,我们提供了它。就是这样。好吧,根据OP回答问题的方式,很明显他很难理解格式,而不是准确性。在你看了十几遍这种类型的问题后,你就会对这些东西有一种眼光。BigDecimal通常有点过头了在第一行,OP说,“在某些情况下,我需要用Java进行非常精确的计算。”。我怀疑他是否真的这么做。他肯定不是在银行业工作。我们应该坚持回答这个问题,而不是假设。我已经按照问题回答了。我还提供了一些链接,OP可以从中找到更多信息。其中一个链接明确指出,使用
BigDecimal
速度慢,使用起来更棘手。但你是谁我们需要决定什么应该用在哪里?OP需要一些帮助,我们提供了。就是这样。好吧,根据OP回答问题的方式,很明显他很难理解格式,而不是准确性。在你看过十几次这种类型的问题后,你会对这些东西有一种眼光。谢谢,但我现在的任务已经完成了要涉及金钱,所以我需要计算的每一步都尽可能精确。然后一直都是
BigDecimal
,注意比例和舍入模式。谢谢,但我现在的任务假设是涉及金钱,所以我需要计算的每一步都尽可能精确。然后一直都是
BigDecimal
,并注意比例和舍入模式。