如何在Coldfusion中读取没有舍入的2个小数位

时间:2014-02-26 13:19:41

标签: coldfusion

示例代码

<cfset b = 5.5566>
<cfset c = numberFormat(b,"9.99")>
<cfdump var="#c#">

我只需要c = 5.55。我怎么能这样做,因为numberFormat会对数字进行舍入?

1 个答案:

答案 0 :(得分:9)

正如Dan指出的那样,截断/舍入是一种不寻常的情况,你应该仔细检查这是客户真正想要的,以及为什么他们想要它(即他们可能想想他们想要的但它的推理不正确。)

如果有正当理由这样做,最简单的方法可能是使用int函数 - 相当于某些语言中的“floor” - 它会将数字向下舍入到下一个整数,所以{{ 1}}成为1.999 (如果负数是一个因素,请考虑fix向小整数舍入,即朝向零。)


由于你想要两个小数位,你可以像这样使用它:

1

多重除以100得到两位小数。

对于任意数量的小数位,您可以用10 dp 替换100s - 其中dp是小数位数,例如:

c = int(b*100)/100

如果你这样做,它可能值得将它包装在一个适当命名的函数中,因此它更具可读性。 (如果有必要,可以添加注释来解释为什么要进行四舍五入而不是更常见的舍入到最接近的值。)


为了显示另一种方式,这也可以通过正则表达式替换来解决:

c = int(b*10^dp)/10^dp

删除小数位和两位数之前的所有数字,直到字符串结尾。

然而,这仅仅是出于教育目的而提及 - int解决方案将更有效。