如何根据输入长度更改DecimalFormat行为?

我使用以下DecimalFormat模式:

 // Use ThreadLocal to ensure thread safety. private static final ThreadLocal  numberFormat = new ThreadLocal () { @Override protected NumberFormat initialValue() { return new DecimalFormat("#,##0.00"); } }; 

这将执行以下转换:

 1 -> 1.00 1.1 -> 1.10 1.12 -> 1.12 

我现在有一个额外的要求。

 1.123 -> 1.123 1.1234 -> 1.123 

这意味着什么时候

  • 小数位少于两位,我将“填充”到小数点后两位。
  • 正好有两三个小数位,我什么都不做。
  • 有超过三个小数位,我将截断到三位小数。

我可以使用DecimalFormat类指定此行为吗?

 DecimalFormat("#,##0.00#") 

您是否尝试更改DecimalFormat实例的RoundingMode

调用setRoundingMode(RoundingMode.FLOOR)应该可以解决问题

另请参见setRoundingMode(java.math.RoundingMode)