2017-04-04 60 views

回答

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 
    } 
} 
+1

PennyRound(x){return round(round(x * 20)/ 20,2)} – errorseven

+0

@ahkcoder如果您想要代表,請將其作爲答案投出。 –

2

演示四捨五入至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 
+0

隨着輸入「3.14」的輸出不向上舍入到3.15,並且類似地,地板(3.12 * 100)/ 100不會下降到3.10 –

+0

3.14的輸入將永遠不會達到3.15。但是,您可以使用天花板功能使3.1415變成3.15。至於樓層的例子,如果你想要1位數的精度,除以乘以10.對於2位數,使用100.對於3位數,使用1000. –

+0

我已經提供了所需功能的答案。所提供的功能並未完全按照需要完成正確的舍入。如果您想出比我的答案更優雅的解決方案,我會很樂意接受您的答案。 –

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