freemarker數字顯示問題(超過1000會加逗號分隔)

前言

freemarker在數字回顯時,如果數字超過999,會自動用 , 分割開,例如 2020 變成了 2,020,然而,此時傳遞到後臺的時候,並不會按照int/long處理,而是當作String字符串處理,所有會報類型不匹配的異常。

<input type="hidden" name="userId" value="${(user.userId)!number}" class="layui-input">

解決方案1全局變量

解決這個問題,只需要在application.properties文件中加入

spring.freemarker.settings.number_format=0.##

至於application.yaml版本爲什麼是number_format而不是number-format,別問我,我也是試出來的,這個通過IDEA的智能提示是無法直接提示的,因爲是個Map對象。

spring:
    freemarker:
        settings:
            number_format: 0.##

yaml的轉換方法可以在toyaml 進行管理。

解決方案2臨時

對於金額和數字建議格式化處理,特別是金額,數字還好,統一配置即可。

${num?c}
如果是2020,會正常輸出2020而不是2,020

${num?string('0.00')}
如果小數點後不足兩位,用 0 代替

${num?string('#.##')}
如果小數點後多餘兩位,就只保留兩位,否則輸出實際值
輸出爲:1239765.46

${num?string(',###.00')}
輸出爲:1,239,765.46
整數部分每三位用 , 分割,並且保證小數點後保留兩位,不足用 0 代替

${num?string(',###.##')}
輸出爲:1,239,765.46
整數部分每三位用 , 分割,並且小數點後多餘兩位就只保留兩位,不足兩位就取實際位數,可以不不包含小數點

${num?string('000.00')}
輸出爲:012.70
整數部分如果不足三位(000),前面用0補齊,否則取實際的整數位

${num?string('###.00')}
等價於
${num?string('#.00')}
輸出爲:12.70
整數取實際的位數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章