ColdFusion中如何按自定义规则处理十进制数值的小数位?
自定义ColdFusion小数位处理方案
问题背景
现有ColdFusion代码:
<cfif (NOT IsNull(nt)) and (NOT IsNull(kt)) > <cfset ct= (nt * kt) / 100> <cfelse> <cfset ct= 00.00 > </cfif>
需求规则:
- 当计算结果百分位为1时(如
10.01、12.31),需舍去该位变为10.00、12.30 - 其他情况保持两位小数不变(如
22.48保留为22.48)
尝试过round(ct)、floor(ct)、NumberFormat(ct, ',9.99')等方法,均无法实现上述自定义规则。
解决方案
方案1:字符串提取判断法
通过格式化后提取百分位数字,逻辑直观易懂:
<cfif (NOT IsNull(nt)) and (NOT IsNull(kt)) > <cfset ct = (nt * kt) / 100> <!--- 统一格式为两位小数 ---> <cfset ctFormatted = NumberFormat(ct, "9.99")> <!--- 提取百分位数字 ---> <cfset hundredthDigit = Right(ctFormatted, 1)> <!--- 根据规则处理数值 ---> <cfif hundredthDigit eq "1"> <cfset ctFinal = NumberFormat(ct - 0.01, "9.99")> <cfelse> <cfset ctFinal = ctFormatted> </cfif> <cfelse> <cfset ctFinal = "00.00"> </cfif> <!--- 输出结果 ---> <cfoutput>处理后的ct值:#ctFinal#</cfoutput>
方案2:数学运算判断法
通过数值运算判断百分位,避免字符串操作:
<cfif (NOT IsNull(nt)) and (NOT IsNull(kt)) > <cfset ct = (nt * kt) / 100> <!--- 分离出百分位的小数部分,规避浮点精度误差 ---> <cfset decimalPart = DecimalFormat(ct - Int(ct * 10) / 10)> <!--- 判断是否符合舍去规则 ---> <cfif decimalPart eq "0.01"> <cfset ctFinal = NumberFormat((Floor(ct * 100) - 1) / 100, "9.99")> <cfelse> <cfset ctFinal = NumberFormat(ct, "9.99")> </cfif> <cfelse> <cfset ctFinal = "00.00"> </cfif> <!--- 输出结果 ---> <cfoutput>处理后的ct值:#ctFinal#</cfoutput>
内容的提问来源于stack exchange,提问作者Must
相关产品推荐
相关产品推荐

