Autohotkey 在自动热键中的浮动上使用Floor()和Ceil()
我在脚本中使用货币,需要合并便士舍入,但是and函数向下/向上舍入到最接近的整数,从而转储“.00”后缀 示例:Autohotkey 在自动热键中的浮动上使用Floor()和Ceil(),autohotkey,Autohotkey,我在脚本中使用货币,需要合并便士舍入,但是and函数向下/向上舍入到最接近的整数,从而转储“.00”后缀 示例: Ceil(3.14)=4,当所需输出3.15 当所需输出为3.10时,下限(3.12)=3 如何解决这个问题?演示了舍入到1/100的精度: round( n, 2 ) floor( n*100 ) / 100 ceil( n*100 ) / 100 示例: round( 3.1415, 2 ) ; returns 3.14 floor( 3.12 * 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
演示舍入到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()
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
}
}
pennyRound(val)
{
;对输入的浮动进行便士舍入,以及
;返回计算的金额。
sub:=SubStr(val,0,1)
subMult:=圆形((sub*0.01),2)
如果(子乘0.02和子乘<0.05){
价格:=整数(整数(val,1)+0.05,2)
;价格:=整数((val+子整数),2)
退货价格
}
否则如果(子乘数>0.05和子乘数<0.07){
价格:=最低价格(val*10)/10
价格:=整数(价格+0.05,2)
退货价格
}
否则如果(子项>0.07){
价格:=ceil(val*10)/10
价格:=整数(价格,2)
退货价格
}
否则{
返回值
}
}
由于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
}
}
pennyRound(val)
{
;对输入的浮动进行便士舍入,以及
;返回计算的金额。
sub:=SubStr(val,0,1)
subMult:=圆形((sub*0.01),2)
如果(子乘0.02和子乘<0.05){
价格:=整数(整数(val,1)+0.05,2)
;价格:=整数((val+子整数),2)
退货价格
}
否则如果(子乘数>0.05和子乘数<0.07){
价格:=最低价格(val*10)/10
价格:=整数(价格+0.05,2)
退货价格
}
否则如果(子项>0.07){
价格:=ceil(val*10)/10
价格:=整数(价格,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
看起来您所寻求的是一个四舍五入到最接近的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
输入为“3.14”时,输出不会四舍五入到3.15,类似地,地板(3.12*100)/100不会四舍五入到3.10。输入为3.14时,将永远不会四舍五入到3.15。但是,可以使用天花板功能将3.1415变为3.15。对于楼层示例,如果您需要1位精度,请除以10再乘以10。对于2位数字,使用100。对于3位数,使用1000。我已经提供了一个具有所需功能的答案。所提供的函数没有按照需要完整地完成适当的舍入。如果你能想出一个比我的答案更优雅的解决方案,我很乐意接受你的答案。输入为“3.14”时,输出不会四舍五入到3.15,同样地,地板(3.12*100)/100不会四舍五入到3.10,输入为3.14时,输出也不会四舍五入到3.15。但是,可以使用天花板功能将3.1415变为3.15。对于楼层示例,如果您需要1位精度,请除以10再乘以10。对于2位数字,使用100。对于3位数,使用1000。我已经提供了一个具有所需功能的答案。所提供的函数没有按照需要完整地完成适当的舍入。如果你能想出一个比我的答案更优雅的解决方案,我很乐意接受你的解决方案。