在 AutoHotkey 中对浮点数使用 Floor() 和 Ceil()
Using Floor() and Ceil() on floats in AutoHotkey
我在我的脚本中使用货币,需要合并便士四舍五入,但是 Floor() and Ceil() 函数将 down/up 舍入到最接近的整数,从而转储“.00”后缀。
示例:
- Ceil(3.14) = 4,当期望输出为3.15
- Floor(3.12) = 3,当期望输出为3.10
我该如何解决这个问题?
演示四舍五入到 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
由于 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
}
}
您要找的似乎是四舍五入到最接近的 0.05 或 1/20。因此乘以 20 而不是 100。Ceiling、Floor 和 Round 函数就是
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
我在我的脚本中使用货币,需要合并便士四舍五入,但是 Floor() and Ceil() 函数将 down/up 舍入到最接近的整数,从而转储“.00”后缀。
示例:
- Ceil(3.14) = 4,当期望输出为3.15
- Floor(3.12) = 3,当期望输出为3.10
我该如何解决这个问题?
演示四舍五入到 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
由于 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
}
}
您要找的似乎是四舍五入到最接近的 0.05 或 1/20。因此乘以 20 而不是 100。Ceiling、Floor 和 Round 函数就是
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