Automation 如何使用自动热键脚本将中的数字(价格)转换为0.05的倍数?

Automation 如何使用自动热键脚本将中的数字(价格)转换为0.05的倍数?,automation,autohotkey,Automation,Autohotkey,我正在使用AHK脚本自动化一个交易软件。在提交价格期间,应用程序不接受介于1.50和1.55之间的值。它只接受0.05的倍数,因为它的刻度大小是0.05,因此我必须使用AHK脚本进行价格转换。以下AHK函数舍入转换并以最接近的刻度大小倍数返回价格 Roundoff(price) ;round off to nearest 5 paisa value { price := Round(price, 2) ;ronded to 2 decimal places priceNoDeci

我正在使用AHK脚本自动化一个交易软件。在提交价格期间,应用程序不接受介于1.50和1.55之间的值。它只接受0.05的倍数,因为它的刻度大小是0.05,因此我必须使用AHK脚本进行价格转换。

以下AHK函数舍入转换并以最接近的刻度大小倍数返回价格

Roundoff(price) ;round off to nearest 5 paisa value
{
    price := Round(price, 2) ;ronded to 2 decimal places
    priceNoDecimal := Floor(price)
    decimalPart :=  price - priceNoDecimal
    decimalPart := Floor( Round(decimalPart * 100, 2) )
    numerator := Floor(decimalPart / 5)
    remainder := Mod(decimalPart, 5)
    if ( remainder > 2)
        retval := (numerator * 5) + 5
    if ( remainder < 3)
        retval := (numerator * 5)
    retval := Round(priceNoDecimal + (retval / 100), 2)
    return retval
}
Roundoff(价格);四舍五入至最接近的5 paisa值
{
价格:=四舍五入(价格,2);四舍五入至小数点后2位
priceNoDecimal:=最低价格(price)
小数部分:=价格-价格特定
小数部分:=地板(圆形(小数部分*100,2))
分子:=楼层(分母/5)
余数:=模(分母,5)
如果(余数>2)
retval:=(分子*5)+5
如果(余数<3)
retval:=(分子*5)
retval:=四舍五入(priceNoDecimal+(retval/100),2)
返回返回
}

以下AHK函数舍入转换并返回最接近刻度大小倍数的价格

Roundoff(price) ;round off to nearest 5 paisa value
{
    price := Round(price, 2) ;ronded to 2 decimal places
    priceNoDecimal := Floor(price)
    decimalPart :=  price - priceNoDecimal
    decimalPart := Floor( Round(decimalPart * 100, 2) )
    numerator := Floor(decimalPart / 5)
    remainder := Mod(decimalPart, 5)
    if ( remainder > 2)
        retval := (numerator * 5) + 5
    if ( remainder < 3)
        retval := (numerator * 5)
    retval := Round(priceNoDecimal + (retval / 100), 2)
    return retval
}
Roundoff(价格);四舍五入至最接近的5 paisa值
{
价格:=四舍五入(价格,2);四舍五入至小数点后2位
priceNoDecimal:=最低价格(price)
小数部分:=价格-价格特定
小数部分:=地板(圆形(小数部分*100,2))
分子:=楼层(分母/5)
余数:=模(分母,5)
如果(余数>2)
retval:=(分子*5)+5
如果(余数<3)
retval:=(分子*5)
retval:=四舍五入(priceNoDecimal+(retval/100),2)
返回返回
}
您可以使用

Round(N / 0.05) * 0.05
例子 解释 我将用0.01来解释,因为它更容易可视化,但它适用于任何数字。四舍五入的数字是1.234。在舍入过程中,3之后的任何内容都需要丢弃

如果我们把数字1.234除以100,我们得到123.4。请注意句点是如何在3之后出现的。所以我们现在就可以使用
Round

四舍五入后,数字是123。现在我们只需要将它缩小到0.01,结果是1.23

格式化 正如评论中指出的,由于浮点数的工作原理,结果可能不精确。因此,如果要将它们转换为字符串,请使用
格式(“{.2f}”,number)

2
来自精确表示0.05的任意倍数所需的最小小数位数。顺便说一句,这可以通过以下方式计算:

Ceil(Log(1 / 0.05)) ; Returns 2
你可以用

Round(N / 0.05) * 0.05
例子 解释 我将用0.01来解释,因为它更容易可视化,但它适用于任何数字。四舍五入的数字是1.234。在舍入过程中,3之后的任何内容都需要丢弃

如果我们把数字1.234除以100,我们得到123.4。请注意句点是如何在3之后出现的。所以我们现在就可以使用
Round

四舍五入后,数字是123。现在我们只需要将它缩小到0.01,结果是1.23

格式化 正如评论中指出的,由于浮点数的工作原理,结果可能不精确。因此,如果要将它们转换为字符串,请使用
格式(“{.2f}”,number)

2
来自精确表示0.05的任意倍数所需的最小小数位数。顺便说一句,这可以通过以下方式计算:

Ceil(Log(1 / 0.05)) ; Returns 2

很好的一个,把它放入
格式(“{.2f}”,input)
中,因为返回精度为2个小数点的值似乎很重要。简洁而漂亮!,你能解释一下它的数学原理吗。感谢您,将其放入
格式(“{.2f}”,输入)
中,因为返回精度为2个小数点的值似乎很重要。简洁而漂亮!,你能解释一下它的数学原理吗。谢谢