如何在Coldfusion中读取不带四舍五入的小数点后2位

如何在Coldfusion中读取不带四舍五入的小数点后2位,coldfusion,Coldfusion,示例代码 <cfset b = 5.5566> <cfset c = numberFormat(b,"9.99")> <cfdump var="#c#"> 我只需要c=5.55。我该怎么做,因为numberFormat会对数字进行舍入?正如Dan指出的,截断/舍入是一种不常见的情况,您应该仔细检查这是客户真正想要的,以及他们想要它的原因,也就是说,他们可能认为自己想要它,但推理不正确 如果有合理的理由这样做,最简单的方法可能是使用函数-在某些语言中相当于fl

示例代码

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

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

正如Dan指出的,截断/舍入是一种不常见的情况,您应该仔细检查这是客户真正想要的,以及他们想要它的原因,也就是说,他们可能认为自己想要它,但推理不正确

如果有合理的理由这样做,最简单的方法可能是使用函数-在某些语言中相当于floor-它将数字向下舍入到下一个整数,因此1.999变为1。 如果负数是一个因素,而不是考虑向更小的整数,即朝零的哪个圆圈。 因为需要两位小数,所以可以这样使用:

c = int(b*100)/100
其中,倍数和除以100表示小数点后两位

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

c = int(b*10^dp)/10^dp
如果您正在这样做,那么可能值得将其包装在一个适当命名的函数中,以便更具可读性。如有必要,添加注释以解释为什么要舍入,而不是更常见的舍入到最接近的值

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

c = b.replaceAll('(?<=\.\d\d)\d+$','')
这将删除所有小数点前的数字和两位数字,直到字符串结束


但是,提到这一点只是出于教育目的-int解决方案将更加有效。

使用字符串函数。Find将给出小数点的位置。len为您提供了字符总数。Left可用于截断。没有直接的数值函数可用于截断小数?如果不需要字符串函数,可以使用向下舍入-即intb*100/100或intb*10^x/10^x,其中x是小数位数。不舍入的截断对于本机函数来说太不寻常了。事实上,如果我被要求这样做,我会问客户是否确定这个请求。如果可能的话,我会对此进行两次投票:一次是为了答案,一次是为了鼓励@Deepak确保他的要求在这里是正确的。