在AutoHotkey中的浮点数上使用Floor()和Ceil()

时间:2017-04-04 22:03:21

标签: autohotkey

我在我的脚本中使用货币并需要合并一分钱,但Floor()Ceil()函数向下/向上舍入到最接近的整数,因此转储&#34 ; 0.00"后缀。

示例:

  1. Ceil(3.14)= 4 ,当所需输出 3.15
  2. Floor(3.12)= 3 ,当所需输出为 3.10
  3. 我该如何解决这个问题?

3 个答案:

答案 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
    }
}