我想用String.format()将一些 BigDecimal 格式化为字符串的一部分:
// Example:
String getPrice( String pattern )
{
BigDecimal price = basePrice.multiply( BigDecimal.ONE.add( vatRate ) );
BigDecimal priceInPence = price.multiply( new BigDecimal( "100" ) );
BigDecimal annualPrice = price.multiply( new BigDecimal( "365" ) );
return String.format( pattern, priceInPence, annualPrice );
}
String myPrice1 = getPrice( "Your price is %1$.3fp/day (£2$.2f/year) including VAT" );
// --> "Your price is 32.100p/day (£117.16/year) including VAT"
String myPrice2 = getPrice( "Around £%2$.0f annualy" );
// --> "Around £117 annually"
但是,那docs http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#dnbdec对于 String.format() 来说,BigDecimals 的任何舍入都将通过 HALF_UP 舍入完成,而我需要 HALF_EVEN。
我知道如何手动设置 BigDecimals 的比例(设置 BigDecimal 的特定精度 https://stackoverflow.com/questions/9482889/set-specific-precision-of-a-bigdecimal) - 但在这种情况下,我希望能够使用任意模式字符串(包括非数字模式元素),所以我不会提前知道要使用什么比例。
因此我的问题是:
我可以设置 String.format() 使用的舍入模式吗?
简短的回答:不。
是否有另一个格式化程序或库可以像我的示例中那样格式化数字?
BigDecimal 通过内部转换new MathContext(compPrec)
或普通HALF_UP
。
您可以使用以下代码java.util.Formatter
最新(或您首选)版本的 Java 并修改 MathContext 的创建以使用 HALF_EVEN。工作时间应该是10-15分钟。但是你需要一个自定义方法来模仿String.format
:
public static String format(String format, Object... args) {
return new FormatterHALF_EVEN().format(format, args).toString();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)