每次用户这样说时,我都会尝试舍入到不同的小数位数。我一直在尝试
BigDecimal dec = new BigDecimal(input).setScale(places, BigDecimal.ROUND_HALF_EVEN);
(和ROUND_HALF_UP
,然后执行dec.doubleValue()
)但它不会添加终端零。
例如,0.4595变为0.46,而不是0.460。非常感谢任何帮助。
答案 0 :(得分:3)
你为什么打电话给doubleValue()
?避免这样做。它有两个问题:
double
BigDecimal
没有尾随零的概念
double
和BigDecimal
之间转换(向任一方向)几乎总是一个坏主意。它们通常用于不同的种值 - 例如高度和重量等物理尺寸最适合double
;人工价值(如货币)最适合BigDecimal
没有拨打doubleValue()
,你就可以了:
import java.math.*;
public class Test {
public static void main(String[] args) {
String input = "0.4595";
int places = 3;
BigDecimal dec = new BigDecimal(input)
.setScale(places, BigDecimal.ROUND_HALF_EVEN);
System.out.println(dec); // Prints 0.460
}
}
答案 1 :(得分:0)
将其更改为:
BigDecimal dec = new BigDecimal(input).setScale(3, BigDecimal.ROUND_HALF_EVEN);