Jsp/Java/jstl/sql—— 针对double/float类型保留两位小数

需求

在对于数据的处理方面,我们有时候会碰到取整,或者保留两位小数等等。

比如,我们要对'数量'这一列取整,由32.00变成32;

对金额这一列保留两位小数,由32.12463 ...变成32.12;

JSTL表示:

 前提:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 

代码:

<fmt:formatNumber type="number" value="${generalLedger.num}" maxFractionDigits="0"/>

 关键点在于:maxFractionDigits =“0”,如果你取整的话,这个可以不用写,如果你要保留两位小数的话,这里改成2即可。

注意:JSTL采用的是四舍六入五奇偶的算法,不是四舍五入简单来说就是:五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。


JS表示:

前提:

数字的类型为INT类型或者浮动类型,在这里可以用到的JS的

parseFloat();
parseInt();

方法进行转换,如果不是,可以进行toFixed()方法,不建议采用,存在精度丢失问题

比如:

3.155.toFixed(2) = 3.15
3.1550001.toFixed(2) = 3.16

在这里,可以采用Math()方法;

代码: 

//去尾法
Number.prototype.toFloor = function (num) {
return Math.floor(this * Math.pow(10, num)) / Math.pow(10, num);
};

//进一法
Number.prototype.toCeil = function (num) {
return Math.ceil(this * Math.pow(10, num)) / Math.pow(10, num);
};

//四舍五入法
Number.prototype.toRound = function (num) {
return Math.round(this * Math.pow(10, num)) / Math.pow(10, num);
};

注意:此处的xxx.toFixed(X)的方法也不是严格的四舍五入,通过网上的查找,这个方法是有缺陷的,对于精密数字或者重要的数据来讲,不建议使用这个,如果没选择的话,此处的解决办法为:JS中的toFixed()四舍五入方法


Java的的表示:

在这里,我只用了最简单的Java的的最简单粗暴的方法处理保留两位小数的。即采用的是DecimalFormat的方法

代码:

 DecimalFormat df = new DecimalFormat("#.00");
 System.out.println(df.format(f));

注意:此处的方法采用的是四舍五入,经过而且处理之后报道查看值的英文字符串字符串,当然,对于Java的而言,还有其他的处理方法,在这里我就不一一列举了。


sql表示:

是在字段中进行控制,比如

CONVERT (m.num,DECIMAL (20,2)),

格式为:convert(字段名称,decimal(20,2))

其中,decimal(20,2)代表的是:20代表长度,即最大值,最多只能有20个数字;2代表保留的小数位。

注意:如果这是float类型的话,你在业务逻辑中又对他进行的加减计算,他的精度又会丢失,从而没有效果

 

参考链接:

的java的的的的的保留两位小数4种方法

JS中的toFixed()四舍五入方法

### 解决 Java 中 `NoClassDefFoundError` 错误 当遇到 `java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/Config` 的错误时,通常意味着应用程序缺少必要的 JSTL 库文件。此问题可以通过确保项目中包含正确的 JSTL 和标准标签库来解决。 #### 使用 Maven 添加依赖项 对于基于 Maven 构建的项目,在项目的 pom.xml 文件中加入如下依赖可以解决问题: ```xml <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <!-- 如果使用Jakarta EE 9及以上版本 --> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> </dependency> ``` 上述配置适用于 Jakarta EE 8 及更早版本;而对于 Jakarta EE 9 或更高版本,则应采用第二个依赖声明[^2]。 #### 手动放置 jar 包到 Tomcat lib 目录 如果不想通过构建工具管理依赖关系,也可以手动下载并安装所需的 jar 文件至应用服务器的全局类路径下。例如,可以从官方资源获取最新版的支持 Jakarta Namespace 的 JSTL 实现,并将其解压后的 .jar 文件复制到 `$CATALINA_HOME/lib` 路径内[^3]。 #### 更新 IDE 设置 有时即使添加了正确的依赖或 jar 文件,IDE(如 IntelliJ IDEA)仍可能报告相同的错误。此时可尝试清理缓存、重启 IDE 并重新编译整个工程以确认更改生效[^4]。 另外需要注意的是,针对不同版本的应用程序接口(API),所使用的包名可能会有所变化——比如从 `javax.*` 到 `jakarta.*` ——因此务必选用与当前环境相匹配的具体实现版本。 #### 验证部署描述符(web.xml) 最后还需检查 web 应用程序的部署描述符 (web.xml) 是否指定了适当的标准命名空间前缀用于加载自定义标记库。这一步骤有助于防止因 XML 命名冲突而引发的相关异常情况发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值