RoundingMode
/*
RoundingMode 是一个枚举类,用于指定数值舍入时的策略。
RoundingMode {
UP, // 向远离零的方向舍入。例如,1.1 和 1.5 都舍入为 2,而 -1.1 和 -1.5 都舍入为 -2。
DOWN, // 向接近零的方向舍入。例如,1.1 和 1.5 都舍入为 1,而 -1.1 和 -1.5 都舍入为 -1。
CEILING, // 向正无穷方向舍入。例如,1.1 和 1.5 都舍入为 2,而 -1.1 和 -1.5 都舍入为 -1。
FLOOR, // 向负无穷方向舍入。例如,1.1 和 1.5 都舍入为 1,而 -1.1 和 -1.5 都舍入为 -2。
HALF_UP, // 四舍五入。例如,1.5 舍入为 2,1.4 舍入为 1,而 -1.5 舍入为 -2,-1.4 舍入为 -1。
HALF_DOWN, // 五舍六入。例如,1.5 舍入为 1,1.6 舍入为 2,而 -1.5 舍入为 -1,-1.6 舍入为 -2。
HALF_EVEN, // 银行家舍入法(最接近的偶数)。例如,1.5 舍入为 2,2.5 也舍入为 2,而 -1.5 舍入为 -2,-2.5 也舍入为 -2。
UNNECESSARY; // 不需要舍入。如果结果无法精确表示,则抛出 ArithmeticException。例如,试图对 1.5 进行舍入时会抛出异常。
}
*/
public enum RoundingMode {
UP,
DOWN,
CEILING,
FLOOR,
HALF_UP,
HALF_DOWN,
HALF_EVEN,
UNNECESSARY;
private RoundingMode() {
}
public static RoundingMode valueOf(int rm) {
throw new RuntimeException("Stub!");
}
}
格式化金额
/**
* 向负无穷方向舍入
*
* 扩展属性用于将 Double? 转换为保留两位小数的货币字符串表示。
* 使用 DecimalFormat 格式化数字
* 例如,1.1 和 1.5 都舍入为 1,而 -1.1 和 -1.5 都舍入为 -2。
*/
val Double?.money: String
get() {
// 创建一个 DecimalFormat 对象 df。DecimalFormat 是一个用于格式化数字的类。"#.##" 这个模式字符串表示格式化时保留最多两位小数。
val df = DecimalFormat("#.##")
// 设置格式化时允许的最大小数位数为 2。即使输入的 Double 有更多的小数位数,也只会显示两位小数。
df.maximumFractionDigits = 2
// 设置格式化时要求的最小小数位数为 2。如果输入的 Double 小数位数不足两位,会用零填充。
df.minimumFractionDigits = 2
// 设置舍入模式为 FLOOR,即向负无穷方向舍入。
df.roundingMode = RoundingMode.FLOOR
return df.format(this ?: 0.00)
}