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

Dee*_*dhy 0 coldfusion

示例代码

<cfset b = 5.5566>
<cfset c = numberFormat(b,"9.99")>
<cfdump var="#c#">
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*ton 9

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

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


既然你想要两个小数位,你会像这样使用它:

c = int(b*100)/100
Run Code Online (Sandbox Code Playgroud)

多重除以100是小数点后两位的地方.

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

c = int(b*10^dp)/10^dp
Run Code Online (Sandbox Code Playgroud)

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


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

c = b.replaceAll('(?<=\.\d\d)\d+$','')
Run Code Online (Sandbox Code Playgroud)

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

但是,这仅仅是出于教育目的而提到的 - int解决方案将更有效.