5
<cfset number1 = 20.5/80 * 100 />
<cfset number2 = 18.125 />
<cfset number3 = 6.875 />

<cfoutput>
DecimalFormat(#number1#): #DecimalFormat(number1)#<br />
DecimalFormat(#number2#): #DecimalFormat(number2)#<br />
DecimalFormat(#number3#): #DecimalFormat(number3)#
</cfoutput>

输出:

十进制格式(25.625):25.62

十进制格式(18.125):18.13

十进制格式(6.875):6.88

而不是输出:

十进制格式(25.625):25.63

十进制格式(18.125):18.13

十进制格式(6.875):6.88

似乎作为数学计算结果的变量使 DecimalFormat() 表现不同。任何快速修复,无需深入研究 Java?

4

4 回答 4

4

我认为问题不在于DecimalFormat(),而是典型的浮点舍入错误。

看:PrecisionEvaluate()

于 2009-09-15T18:49:43.500 回答
2

DecimalFormat 是一个格式化函数。不是数学函数。它的工作不是为你四舍五入你的数字,不幸的是 CF 缺乏良好的小数数学函数,所以你必须自己编写。

这是有人在 CF livedocs 页面上为 round() 写的:

 <cffunction name="roundDecimal" returntype="numeric"> 
     <cfargument name="num" type="numeric" required="yes"> 
     <cfargument name="decimal" type="numeric" default="2" required="no"> 

     <cfreturn round(num*10^decimal)/10^decimal /> 
  </cffunction>
于 2009-09-15T17:25:36.120 回答
0

一个快速的解决方法是将第 1 行更改为number1 = NumberFormat(20.5/80 * 100,'9.999')

于 2015-06-13T16:10:51.687 回答
-1

请参阅 CF 文档NumberFormat并在 round 上进行页面搜索以查看一些特定信息。

于 2009-09-16T12:48:40.693 回答