在舍入小数的同时获得不同的结果

Joe*_*Joe 3 java bigdecimal

double radius = 5;
double area = Math.PI * Math.pow(radius, 2);            
// System.out.println(area);

BigDecimal bd = new BigDecimal(area).setScale(2, HALF_UP);
// BigDecimal bd = new BigDecimal(area).setScale(2, ROUND_HALF_UP);
System.out.println(bd.toString());
Run Code Online (Sandbox Code Playgroud)

上面的输出打印为78.54,但如果我通过计算器(windows calc接口)执行相同的操作,则输出为78.57(即22/7 * 25).

为什么会出现不一致的情况

Viv*_*sse 20

您是否将22/7PI用作PI的近似值?因为22/73.142857142857...其中PI是约3.14159....这解释了您的舍入不一致性.

此处记录了JVM中使用的PI的近似值.根据JavaDoc,它是:

pi更接近的

  • Pi是3.14159265358979323846264338327950288419716939937510 ...请参阅http://en.wikipedia.org/wiki/Pi (3认同)
  • 是.它的值是`3.141592653589793` [截断],你可以在`calc`中尝试`3.141592653589793*25` (2认同)
  • @Joe,因为PI是一个常数我假设它只是存储到一些精度设置.没有必要计算一个不能改变的常数(计算它也会有性能损失,尽管通常不可测量). (2认同)
  • 是的,你可以假设``Math.PI``比实际PI更接近22/7.您可以在Java文档http://download.oracle.com/javase/6/docs/api/constant-values.html#java.lang.Math.PI中看到它的确切值. (2认同)

Jig*_*shi 6

22/7是近似的PI,它不精确,所以结果

  • 你也可以使用3; 它不是一个近似的坏,更容易计算 (4认同)
  • 你过早地提交过了吗? (3认同)