Autohotkey 在自动热键中的浮动上使用Floor()和Ceil()

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

我在脚本中使用货币,需要合并便士舍入,但是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  ) / 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。我已经提供了一个具有所需功能的答案。所提供的函数没有按照需要完整地完成适当的舍入。如果你能想出一个比我的答案更优雅的解决方案,我很乐意接受你的解决方案。