我正在使用貨幣在我的腳本中,需要合併一分錢舍入,但Floor()和Ceil()函數向下舍入到最近的整數,從而轉儲「 .00「後綴。在AutoHotkey的花車上使用Floor()和Ceil()
實例:
- 的Ceil(3.14)= ,當希望的輸出是3.15
- 樓層(3.12)= ,當希望的輸出是3.10
我該如何解決這個問題?
我正在使用貨幣在我的腳本中,需要合併一分錢舍入,但Floor()和Ceil()函數向下舍入到最近的整數,從而轉儲「 .00「後綴。在AutoHotkey的花車上使用Floor()和Ceil()
實例:
我該如何解決這個問題?
由於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
}
}
演示四捨五入至100分之1的精度:
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
隨着輸入「3.14」的輸出不向上舍入到3.15,並且類似地,地板(3.12 * 100)/ 100不會下降到3.10 –
3.14的輸入將永遠不會達到3.15。但是,您可以使用天花板功能使3.1415變成3.15。至於樓層的例子,如果你想要1位數的精度,除以乘以10.對於2位數,使用100.對於3位數,使用1000. –
我已經提供了所需功能的答案。所提供的功能並未完全按照需要完成正確的舍入。如果您想出比我的答案更優雅的解決方案,我會很樂意接受您的答案。 –
它看起來像你正在尋找的是舍入到最接近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
PennyRound(x){return round(round(x * 20)/ 20,2)} – errorseven
@ahkcoder如果您想要代表,請將其作爲答案投出。 –