java - 大值会导致准确性损失

标签 java double bigdecimal

我遇到了大值的问题。 请帮助我。

Scanner scanner=new Scanner(System.in);
            double rate=1.0000;
            double value=scanner.nextDouble();
            value*=rate;
                BigDecimal bigDecimal=new BigDecimal(value);
            System.out.println(bigDecimal);

但是当我输入时

121212121212121212121212121212121212121212121212

我的输出是

121212121212121209445819616146456785067331026944

请帮助我。 如何准确获取数值?

最佳答案

如果您使用精度有限的 double 来初始化 BigDecimal,则使用 BigDecimal 是没有意义的。

您应该使用字符串来初始化它:

Scanner scanner=new Scanner(System.in);
String value=scanner.nextLine();
BigDecimal bigDecimal=new BigDecimal(value);
System.out.println(bigDecimal);

如果您希望将输入乘以 1 以外的值(乘以 1 毫无意义),请使用 bigDecimal.multiply(...)

关于java - 大值会导致准确性损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901885/

相关文章:

java - 如何将不同的数字类型转换为Double?

java - 执行涉及非终止 BigDecimal 的算术

java - 将固定值添加到 bigdecimal 列表中

java - 在 JBoss AS 中以编程方式选择登录模块

java - Java 中对应的 unicode 括号?

java - Android Fragment findViewById 在膨胀 View 后返回 Null

java - 如何从返回 double 组的方法中获取所有 double 值?

integer - Json String包含整型值,反序列化为HashMap,Integer转为double值

java - 将数字 (22,21) 映射到 BigDecimal 时,Hibernate 在结果中丢失精度

java - 金字塔最小和路径2D ArrayList IndexOutOfBounds