rounding decimal points
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Round a double to 2 significant figures after decimal point
我正在尝试将十进制度数(23.1248)转换为分钟样式的度数(23 7'29.3")。这就是我目前为止所拥有的:
1 2 3 4 5 | double a=23.1248; int deg=(int)a;//gives me the degree float b=(float) (a-deg); int min=(int) (b*60);//gives me the minutes double sec= (double) ((c*60)-min);//gives me my seconds |
一切正常,但我想把秒数四舍五入到最接近的十分之一或百分之一。我研究过十进制格式,但不希望将其转换为字符串。我也看过bigdecimal,但不认为这有帮助,
放大后,尝试在数字上使用
1 2 |
如果你想获得真正的重量级,也可以使用
1 2 | BigDecimal a = new BigDecimal("1.234"); BigDecimal b = a.setScale(2, RoundingMode.DOWN); // => BigDecimal("1.23") |
首先,有一些库函数可以做到这一点,那么为什么不直接使用这些函数呢?请参见math.round()。不需要重新发明轮子。不过,如果你想的话,你可以试试下面的方法。把一个双关调到百分位:
1 | x = 0.01 * floor(x * 100.0) |
四舍五入到第十位:
1 | x = 0.1 * floor(x * 10.0) |
要将双精度旋转到10^K位置:
1 | x = 10^k * floor(x / 10^k) |
任何语言(包括Java)的实现应该是直截了当的。有一个问题是,它不是真正的圆形,而是截断到您的位置。要解决这个问题,您只需在四舍五入之前将0.5*10^k添加到您的数字。如果您只想进行四舍五入,请使用上面的版本,并在计算之前或之后添加10^k。