Java String.format() 与 HALF_EVEN 舍入

2024-04-26

我想用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) - 但在这种情况下,我希望能够使用任意模式字符串(包括非数字模式元素),所以我不会提前知道要使用什么比例。

因此我的问题是:

  • can I 设置 String.format() 使用的舍入模式? OR

  • 有没有另一个格式化程序或库这会像我的示例中那样格式化数字吗?


我可以设置 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(使用前将#替换为@)

Java String.format() 与 HALF_EVEN 舍入 的相关文章

随机推荐