是否可以使用 f:convertNumber 进行四舍五入?我在这里检查了api,它没有提到任何关于舍入的内容。如果不是,那么在四舍五入时将双精度值转换为 $ 值的下一个最佳方法是什么?
<f:convertNumber maxFractionDigits="2" groupingUsed="true" currencySymbol="$" maxIntegerDigits="7" type="currency" />
例如:1.104999 美元应该变成 1.11 美元
是否可以使用 f:convertNumber 进行四舍五入?我在这里检查了api,它没有提到任何关于舍入的内容。如果不是,那么在四舍五入时将双精度值转换为 $ 值的下一个最佳方法是什么?
<f:convertNumber maxFractionDigits="2" groupingUsed="true" currencySymbol="$" maxIntegerDigits="7" type="currency" />
例如:1.104999 美元应该变成 1.11 美元
这适用于我的具体情况。但它会有任何其他会破坏的边缘情况吗?
首先,在我的 java 类中对其进行舍入:
private double roundCost(double cost) {
return (Math.ceil(cost*100))/100;
}
然后将其传递给我的 f:convertNumber。
我愿意接受其他建议。
double
在处理诸如货币金额之类的确切数字时,您真的不应该在 Java 中使用原语;相反,使用java.lang.BigDecimal
或一些自定义的 Money 类型;有关原因的解释,请参阅这个 SO question。
BigDecimal
支持多种舍入模式;您正在寻找的可能是java.math.RoundingMode.UP
。
至于如何将它与 af:convertNumber 结合起来的问题,我目前正在研究这个问题。
在使用默认舍入机制之前,可以添加 0,005(在您的情况下)。