public final class NumberFormatUtil extends Object
NumberFormat
是所有数值格式的抽象基类,此类提供格式化和解析数值的接口.
直接已知子类: ChoiceFormat
, DecimalFormat
.
注意:DecimalFormat
不是同步的 ,建议为每个线程创建独立的格式实例.(见JAVA API 文档)
Format
,
NumberFormat
,
DecimalFormat
,
NumberPattern
public static String format(Number value, String numberPattern, RoundingMode roundingMode)
Number
使用 RoundingMode
numberPattern
格式化.
NumberFormatUtil.format(toBigDecimal(1.15), "#####.#",null) = 1.2 NumberFormatUtil.format(toBigDecimal(1.25), "#####.#",null) = 1.3 NumberFormatUtil.format(toBigDecimal(1.251), "#####.#",null) = 1.3 NumberFormatUtil.format(toBigDecimal(-1.15), "#####.#",null) = -1.2 NumberFormatUtil.format(toBigDecimal(-1.25), "#####.#",null) = -1.3 NumberFormatUtil.format(toBigDecimal(-1.251), "#####.#",null) = -1.3 NumberFormatUtil.format(toBigDecimal(1.15), "#####.#", RoundingMode.HALF_EVEN) = 1.2 NumberFormatUtil.format(toBigDecimal(1.25), "#####.#", RoundingMode.HALF_EVEN) = 1.2 NumberFormatUtil.format(toBigDecimal(1.251), "#####.#", RoundingMode.HALF_EVEN) = 1.3 NumberFormatUtil.format(toBigDecimal(-1.15), "#####.#", RoundingMode.HALF_EVEN) = -1.2 NumberFormatUtil.format(toBigDecimal(-1.25), "#####.#", RoundingMode.HALF_EVEN) = -1.2 NumberFormatUtil.format(toBigDecimal(-1.251), "#####.#", RoundingMode.HALF_EVEN) = -1.3
value
:请尽量传递Integer,Long,BigDecimal,而不要使用 float,double等浮点类型,否则可能结果不准确,特别是jdk8以下的版本,具体参见 NumberFormatUtilTest 在 jdk8 下面测试不通过
roundingMode
虽然
DecimalFormat
,默认使用的是银行家舍入法RoundingMode.HALF_EVEN
,参见 关于 RoundingMode#HALF_EVEN但是我们常用标准的四舍五入,为了保持和
NumberUtil.toString(Number, String)
一致性,如果 roundingMode 为null,使用常用的RoundingMode.HALF_UP
来进行格式化
value
- the valuenumberPattern
- 格式化数字格式,可以参见或者使用NumberPattern
roundingMode
- 舍入模式RoundingMode
,如果 为null,使用常用的 RoundingMode.HALF_UP
value
是null,抛出 NullPointerException
numberPattern
是null,抛出 NullPointerException
numberPattern
是blank,抛出 IllegalArgumentException
DecimalFormat
,
JAVA 8种舍入法Copyright © 2008-2019 by feilong