代码之家  ›  专栏  ›  技术社区  ›  Stephan

如何在symja中固定精度?[复制品]

  •  0
  • Stephan  · 技术社区  · 7 年前

    这个问题已经有了答案:

    我在用 Symja .

    http://matheclipse.org/ ,当我运行以下公式时:

    round(100*17347*0.047)*0.01
    

    我得到: 815.31

    运行以下Java代码时

    ExprEvaluator exprEvaluator = new ExprEvaluator(false,100);
    double d = exprEvaluator.evalf("round(100*17347*0.047)*0.01");
    System.out.println(d);
    

    我得到: 815.3100000000001

    我错过了什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Soner from The Ottoman Empire    7 年前

    代码没有错。如果你只想得到2个数字的精度,我的意思是打印,使用 printf() 代替 println()

    ExprEvaluator exprEvaluator = new ExprEvaluator(false,100);
    double d = exprEvaluator.evalf("round(100*17347*0.047)*0.01");
    System.out.printf("%.2f\n", d);
    

    或者,如果你想要它的数值舍入值,你可以使用Java的 DecimalFormat

    double d = 815.3100000000001;
    System.out.println(d);
    
    DecimalFormat newFormat = new DecimalFormat("#.##");
    double twoDecimal =  Double.valueOf(newFormat.format(d));
    System.out.println(twoDecimal);
    

    更重要的是,如果您对它的行为感到不舒服,请忽略 evalf 方法与应用 Math.round(...) 在它里面。它会在不需要额外的Java方法的情况下实现您的愿望。此外,您应该看一下 埃弗夫 .

    推荐文章