Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何添加一个非常小的数字和一个非常大的数字_Java_Precision_Numerical Methods - Fatal编程技术网

Java 如何添加一个非常小的数字和一个非常大的数字

Java 如何添加一个非常小的数字和一个非常大的数字,java,precision,numerical-methods,Java,Precision,Numerical Methods,我对Java还很陌生。我现在正在学习数值计算。如何将一个非常小的数字和一个非常大的数字相加和相乘,比如说$10^{-20}$阶和$10^{20}$阶的任意精度 尝试以下操作(不计算零)。您可能会发现构造10^20/10^-20的其他方法更合适 System.out.println( new BigDecimal("0.0000000000000000000000000000001").add( new BigDecimal ("10000000000000000000000000

我对Java还很陌生。我现在正在学习数值计算。如何将一个非常小的数字和一个非常大的数字相加和相乘,比如说$10^{-20}$阶和$10^{20}$阶的任意精度

尝试以下操作(不计算零)。您可能会发现构造10^20/10^-20的其他方法更合适

System.out.println( new BigDecimal("0.0000000000000000000000000000001").add( new BigDecimal
        ("100000000000000000000000000000000")));
看看这门课。从Javadoc:

不可变、任意精度有符号十进制数

以及:

BigDecimal类为用户提供了对舍入行为的完全控制

例如:

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal big = new BigDecimal("10e20");
        BigDecimal small = new BigDecimal("10e-20");
        BigDecimal ans = big.add(small);

        System.err.println("Answer: " + ans);
    }
}
运行会产生以下结果:

$ java Main
Answer: 1000000000000000000000.00000000000000000010

如果double没有足够的精度,您可能需要大的十进制数。虽然我试了两次,但你还是表现出色。然而,它不起作用,因为它只是忽略了少数部分。