我在我的脚本中使用货币并需要合并一分钱,但Floor()和Ceil()函数向下/向上舍入到最接近的整数,因此转储&#34 ; 0.00"后缀。
示例:
我该如何解决这个问题?
答案 0 :(得分:2)
展示四舍五入到1/100的精度:
round( n, 2 )
floor( n*100 ) / 100
ceil( n*100 ) / 100
示例:
round( 3.1415, 2 ) ; returns 3.14
floor( 3.12 * 10 ) / 10 ; returns 3.100000
ceil( 3.1415 * 100 ) / 100 ; returns 3.150000
答案 1 :(得分:2)
看起来你正在寻找的是四舍五入到最接近的0.05或1/20。因此乘以20而不是100.然后是天花板,地板和圆形函数
round(ceil(3.14*20)/20,2) ; 3.15
round(floor(3.14*20)/20,2) ; 3.10
round(round(3.14*20)/20,2) ; 3.15
round(ceil(3.12*20)/20,2) ; 3.15
round(floor(3.12*20)/20,2) ; 3.10
round(round(3.12*20)/20,2) ; 3.10
答案 2 :(得分:0)
由于round()
,floor()
和ceil()
只完成了所需功能的一部分,因此我编写了一个小函数来完成正确的舍入。
pennyRound(val)
{
;Performs penny rounding on inputted float, and
;returns calculated amount.
sub := SubStr(val, 0, 1)
subMult := round((sub * 0.01), 2)
if (subMult <= 0.02) {
price := round((val - subMult), 2)
return price
}
else if (subMult > 0.02 && subMult < 0.05) {
price := round(round(val, 1) + 0.05, 2)
;price := round((val + subMult), 2)
return price
}
else if (subMult > 0.05 && subMult < 0.07) {
price := floor(val*10)/10
price := round(price + 0.05, 2)
return price
}
else if (subMult > 0.07) {
price := ceil(val*10)/10
price := round(price, 2)
return price
}
else {
return val
}
}