5 小时以前 9bad721754fe8bbe2e5f459d0706e0fefac569f3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package cn.iocoder.yudao.module.qcreport.engine;
 
/**
 * 数值输出格式。
 * <p>
 * Java 的 {@code String.valueOf(210.0D)} 得到 "210.0",而 JS 的 {@code String(210)} 是 "210"。
 * 渲染产物({@code @page} 尺寸、绑定值、比较时的文本形态)必须与前端逐字一致,
 * 否则同一份模板在两端会输出不同的 HTML。
 */
public final class Numbers {
 
    /** 双精度能精确表示成整数的上界,超过它就不再当整数处理 */
    private static final double MAX_SAFE_INTEGER = 9.007199254740992E15;
 
    private Numbers() {
    }
 
    /** 整数值的浮点数收成整数输出(60.0 → "60"),其余原样输出 */
    public static String toString(double value) {
        if (Double.isFinite(value) && value == Math.rint(value) && Math.abs(value) <= MAX_SAFE_INTEGER) {
            return String.valueOf((long) value);
        }
        return String.valueOf(value);
    }
 
}