java - BigDecimal 方法返回模糊结果,为什么会发生这种情况?

标签 java eclipse double java.util.scanner bigdecimal

代码:

package tk.vivekpatani.www;

import java.math.BigDecimal;
import java.util.Scanner;

public class SimpleCalc {

  public static void main(String[] args) {


    // TODO Auto-generated method stub
    Scanner sc = new Scanner(System.in);
    try{
    System.out.println("Welcome to the Calculator!");


    System.out.println("Enter Number 1:");
    double num1 = sc.nextDouble();

    System.out.println("Enter Number 2:");
    double num2 = sc.nextDouble();

    BigDecimal bd1 = new BigDecimal(num1);
    BigDecimal bd2 = new BigDecimal(num2);

    BigDecimal result = addition(bd1,bd2);

    System.out.println("Result:"+result.toString());
    }
    finally{
      sc.close();
    }

  }
  static BigDecimal addition(BigDecimal input1, BigDecimal input2){

    BigDecimal result = input1.add(input2);
    return result;

  }


}

结果:

Welcome to the Calculator!
Enter Number 1:
90
Enter Number 2:
10.2
Result:100.199999999999999289457264239899814128875732421875

我正在使用 Eclipse IDE Mars 和 Java 1.8。

最佳答案

由于使用的精度,double 无法正确处理 0.2

尝试这样做来创建数字,您需要使用字符串构造 BigDecimal,这样就不会遗留精度问题。

    System.out.println("Enter Number 1:");
    String num1 = sc.nextLine();
    BigDecimal bd1 = new BigDecimal(num1);

    System.out.println("Enter Number 2:");
    String num2 = sc.nextLine();
    BigDecimal bd2 = new BigDecimal(num2);

关于java - BigDecimal 方法返回模糊结果,为什么会发生这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32419276/

相关文章:

java - Scala 字节数组类型不匹配错误

java - SSL/TLS 版本兼容性?

android studio为模块添加.aar依赖而不生成其他.gradle文件

Eclipse插件: add Launch command group to Custom Perspective

C:函数参数输入看似随机变化

c++ - 从内存中提取 double 的字节值

java - Fasterxml Jackson ObjectMapper 生成带有 '=' 字符的 JSON 字符串

java - 如何使 Eclipse 从 getter/setter 中去除下划线

gcc - double 和 ffast-math 上的自动矢量化

java - 如何在雅虎通中跟踪数据包!