JSTL算术丢失精度
JSTL arithmetic losing precision
为什么这个 JSTL 块的结果是 0.9999999999999999,解决方法是什么?
<c:set var="one" value="0.1"/>
<c:set var="two" value="0.7"/>
<c:set var="three" value="0.1"/>
<c:set var="four" value="0.1"/>
<c:out value="${one+two+three+four}"/>
JB Nizet 的评论是正确的,但这是处理方法。
处理时应考虑使用fmt:formatNumber函数
浮点数字。这是一个URL:http://www.tutorialspoint.com/jsp/jstl_format_formatnumber_tag.htm
这是一个例子:
<c:set var="one" value="0.1"/>
<c:set var="two" value="0.7"/>
<c:set var="three" value="0.1"/>
<c:set var="four" value="0.1"/>
<fmt:formatNumber value="${one+two+three+four}" maxFractionDigits="2" />
确保在 JSP 代码的顶部包含此行:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
为什么这个 JSTL 块的结果是 0.9999999999999999,解决方法是什么?
<c:set var="one" value="0.1"/>
<c:set var="two" value="0.7"/>
<c:set var="three" value="0.1"/>
<c:set var="four" value="0.1"/>
<c:out value="${one+two+three+four}"/>
JB Nizet 的评论是正确的,但这是处理方法。
处理时应考虑使用fmt:formatNumber函数 浮点数字。这是一个URL:http://www.tutorialspoint.com/jsp/jstl_format_formatnumber_tag.htm
这是一个例子:
<c:set var="one" value="0.1"/>
<c:set var="two" value="0.7"/>
<c:set var="three" value="0.1"/>
<c:set var="four" value="0.1"/>
<fmt:formatNumber value="${one+two+three+four}" maxFractionDigits="2" />
确保在 JSP 代码的顶部包含此行:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>