前言
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
整數取實際的位數