背景:

spring后端输出double类型数据,前端使用thymeleaf框架,格式化double数据类型,由于需要显示原值(比如原来录入5,而不能显示5.00),因此需要存储数值(存储值为decimal类型,其中2位小数)小数点后面进行去零处理,而不能采用thymeleaf本身的格式化方式。

思路:

1.尝试thymeleaf本身自带函数解决,未果(thymeleaf本身方法处理无法去除小数点后面的0,只能显示固定的小数点位数)。

2.采用JS解决,感觉有些麻烦,而且与thymeleaf结合也较困难,作罢。

3.由于Java端比较擅长处理数值格式化问题,而thymeleaf也正巧在服务端完成解析标签工作,那么能否让thymeleaf框架调用Java方法呢?理论上是可行的,经过不断实践,终于实验成功。

4.扩展thymeleaf标签

经过对比发现,方法3实现较简单,具体做法如下:

实现方法:

方法1:thymeleaf框架调用Java静态方法:

编写一个Java类,里面写一个静态方法,用于处理double类型数据格式化,返回字符串。详细代码如下:

package com.hw.ibweb.util;

import org.apache.http.util.TextUtils;

import java.math.BigDecimal;
import java.text.DecimalFormat; /**
* Created by clyan on 2019/10/23 10:08.
*/
public class FormatUtil { /**
* double小数点格式化
* @param value
* @return
*/
public static String valueFormat(double value) {
DecimalFormat df = new DecimalFormat("#####.##");
String xs = df.format(new BigDecimal(value));
return xs;
}
}

然后,在相关html中,采用如下写法:

 <input type="text" class="form-control" width="250px" maxlength="6"
placeholder="最长6位数字"
name="code" th:attr="id=${item.dcitCode}"
th:value="${T(com.hw.ibweb.util.FormatUtil).valueFormat(item.money)}"
aria-label="Text input with checkbox"/>

即,采用thymeleaf框架的${T(fullclasspath).function()}接口解决,结果如下:

至此,thymeleaf框架调用Java静态方法的思路已经实现,那么thymeleaf框架能否调用Java实例方法呢?经过实践发现,也是没问题的。

方法二:thymeleaf调用Java实例方法:

实例方法:

package com.hw.ibweb.util;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component; import java.math.BigDecimal;
import java.text.DecimalFormat; /**
* Created by clyan on 2019/10/10 11:57.
*/ public class bbb { public String valueFormat(double value) {
DecimalFormat df = new DecimalFormat("#####.##");
String xs = df.format(new BigDecimal(value));
return xs;
}
}

在html页面中,调用该方法写法如下:

 <input type="text" class="form-control" width="250px" maxlength="6"
placeholder="最长6位数字"
name="code" th:attr="id=${item.dcitCode}"
th:value="${new com.hw.ibweb.util.bbb().valueFormat(item.money)}"
aria-label="Text input with checkbox"/>

最终能效果也如预期:

至此,完整解决double数值格式化问题。

为解决Thymeleaf数字格式化问题而想到的几种方案的更多相关文章

  1. js 实现数字格式化(货币格式)几种方法

    // 方法一 function toThousands(num) { var result = [ ], counter = 0; num = (num || 0).toString().split( ...

  2. 解决 Vue 项目 invalid host header 问题(两种方案)

    问题出现背景 做微信H5网页时,使用花生壳内网穿透进行调试时,打开网页显示:invalid host header 分析问题 这句话的意思是:无效的Host请求头: 因为在vue在调试时相当于启动了一 ...

  3. 使用 .toLocaleString() 轻松实现多国语言价格数字格式化

    用代码对数字进行格式化,显然不是逢三位加逗号这么简单.比如印度在数字分位符号上的处理,就堪称业界奇葩: 印度的数字读法用“拉克”(十万)和“克若尔”(千万),数字标法用不对称的数位分离,即小数点左侧首 ...

  4. Java学习笔记 06 数字格式化及数学运算

    一.数字格式化 DecimalFormat类 >>DecimalFormat是NumberFormat的子类,用于格式化十进制数,可以将一些数字格式化为整数.浮点数.百分数等.通过使用该类 ...

  5. spring mvc4的日期/数字格式化、枚举转换

    日期.数字格式化显示,是web开发中的常见需求,spring mvc采用XXXFormatter来处理,先看一个最基本的单元测试: package com.cnblogs.yjmyzz.test; i ...

  6. 数字格式化函数:Highcharts.numberFormat()

    (转)数字格式化函数:Highcharts.numberFormat() 一.函数说明 该函数用于图表中数值的格式化,常见用途有数值精度控制.小数点符.千位符显示控制等.   二.函数使用   1.函 ...

  7. php实现数字格式化,数字每三位加逗号的功能函数

    原地址:http://www.jb51.net/article/73781.htm php实现数字格式化,数字每三位加逗号的功能函数,具体代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 ...

  8. (转)数字格式化函数:Highcharts.numberFormat()

    一.函数说明 该函数用于图表中数值的格式化,常见用途有数值精度控制.小数点符.千位符显示控制等.   二.函数使用   1.函数构造及参数 Highcharts.numberFormat (Numbe ...

  9. PHP数字格式化,每三位逗号分隔数字,可以保留小数

    在报价的时候为了给浏览者更清晰明确的数字,所以需要用到数字格式化,有两种方法,一种自己写函数,另一种当然是系统自带的,其实我更喜欢系统自带的. 先来系统简单的: string number_forma ...

随机推荐

  1. Delphi 触发异常的方法

  2. CDH中Oozie无法卸载

    问题:HUE依赖Oozie 所以Oozie不能够卸载,好坑啊    解决思路: 重新装回来,但是不启动Oozie,节约一部分性能.  

  3. Dubbo 04 服务化最佳实现流程

    Dubbo 04 服务化最佳实践 分包 建议将服务接口.服务模型.服务异常等均放在 API 包中,因为服务模型和异常也是 API 的一部分,这样做也符合分包原则:重用发布等价原则(REP),共同重用原 ...

  4. 【转载】#pragma once与#ifndef

    本篇随笔为转载,原贴地址:#pragma once与#ifndef解析 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在 ...

  5. JavaScript 复制变量的三种方法

    参考:Copying Objects in JavaScript - Orinami Olatunji(@orinamio_) October 23, 2017    直接将一个变量赋给另一个变量时, ...

  6. Hibernate的缓存(收集)

    (1)缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),这个数据结构通常是或类似Hashmap,当以后要使用某个对象 时,先查询缓存中是否有这个对象,如果有则使用缓存中的对 ...

  7. 如何获取到app的包名

    相信很多朋友在刚开始接触测试app的时候都不清楚app的包名是什么,接下来给大家介绍几种方法去获取. 一.手机设备已连接到电脑,点击进入app中,前提是电脑上装备了android-SDK,tools文 ...

  8. mongodb 3.0 WT 引擎性能测试(转载)

    网上转载来的测试,仅供参考.原文地址:http://www.mongoing.com/benchmark_3_0 类机器. 测试均在单机器,单实例的情况下进行. 机器A(cache 12G,即内存&g ...

  9. TCP如何保证可靠传输

    TCP 协议如何保证可靠传输   一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节 ...

  10. Codeforces 343D Water Tree & 树链剖分教程

    原题链接 题目大意 给定一棵根为1,初始时所有节点值为0的树,进行以下三个操作: 将以某点为根的子树节点值都变为1 将某个节点及其祖先的值都变为0 *询问某个节点的值 解题思路 这是一道裸的树链剖分题 ...