如何在java中乘法以保持特定的精度?

hgqdbh6s  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(383)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

15天前关门了。
改进这个问题
我有一个java程序,它可以将数字相乘,我需要一个epsilon,它表示浮点计算的预期精度,我的epsilon=1e-10;

double x = 0.19334657881077877;
if (x == ( x* 1e8) * 1e-8)
    System.out.println("true");
else System.out.println("false");

这总是打印假我怎么能做乘法,使它打印真?

mlnl4t2r

mlnl4t2r1#

float和double都是用二进制来计算值的,它们在计算过程中以及二进制和十进制之间的转换都会丢失一些数据。
您应该尝试使用bigdecimal来避免这种情况。

public static void main(String[] args) {
        double x = 0.19334657881077877;
        if (x == x * 1e8 * 1e-8) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
        System.out.println(x * 1e8);
        System.out.println(x * 1e-8);
        System.out.println(x * 1e8 * 1e-8);

        BigDecimal y = new BigDecimal("0.19334657881077877");
        if (y.equals(y.multiply(new BigDecimal("1e8")).multiply(new BigDecimal("1e-8")))) {
            System.out.println("true");
        }
        else {
            System.out.println("false");
        }
        System.out.println(y.multiply(new BigDecimal("1e8")));
        System.out.println(y.multiply(new BigDecimal("1e-8")));
        System.out.println(y.multiply(new BigDecimal("1e8")).multiply(new BigDecimal("1e-8")));
    }

相关问题