2015-04-03 45 views
0

你好專家那裏,的Javascript:圓形一半還要最後2個位數

var total1 = 123.44; //how do i round this up to 123.40? 
var total2 = 123.45; //this value stay (no changes) 
var total3 = 123.46; //how do i round this up to 123.50? 

我試圖做的是:

total = totalfromdb; 
    GST = total*6/100; //<--- This value needed to round half even as mentioned above 
    GSTadjust = ???????; //<--- How do i get the total different from GST (round half even above)? 
    grandtotal = parseInt(GST) + parseInt(total); //<--- This value for mygrandtotal 

的問題是在代碼中。 我如何四捨五入0.44到0.40和0.46到0.50和/或得到不同的值,例如:

.44到.40,不同的值是-4(要顯示在頁面上)。

.46到.50,不同的值是+4(在頁面上顯示)。

,我需要一輪值的一半甚至可能是123.439999999996或123.45999999

我已經編輯我作爲馬蒂Mehtonen問題建議。

預先感謝您。

+0

你打算如何處理四捨五入的值? – MBo 2015-04-03 14:00:43

+0

@MBo爲總計算 – Onesofazr 2015-04-04 03:55:37

+0

然後使用20 * x整數(加到我的文章) – MBo 2015-04-04 04:37:57

回答

0

如果值是0.05整除你可以做到這一點

var round_half = function(num) { 
    if ((num * 100) % 10 != 5) { 
     num = (Math.round(num * 10)/10).toFixed(2); 
    } 
    return num; 
} 
0

使用
Math.round(NUM * 100)/ 100

+0

我試過但沒有變化 – Onesofazr 2015-04-03 13:05:18

+0

我認爲它不可能 – malli 2015-04-04 04:44:17

-1

檢查。如果是,價值不需要改變。如果不是,那麼你需要將該數字舍入。您可以通過10

var round = function (total) { 

    if (total % 0.05 === 0) { 
     return total; 
    } else { 
     return Math.round(total * 10)/10; 
    } 
}; 

用10乘以值,則四捨五入到最接近的整數,然後除以數量做對了,下一次演出的時候,你問一個問題你已經嘗試了什麼。 :)

+0

謝謝你的回覆,我更新了我的問題:) – Onesofazr 2015-04-03 13:00:42

+0

可分性檢查在二進制浮點上下文中沒有多大意義:* no *非零二進制浮點值是5/100的精確倍數,因此很難預測您的if分支拍攝。 – 2015-04-03 20:54:38

+0

事實上,對於在點後面有2位數的十進制數的二進制近似值,你的'if'分支將幾乎不會被採用。 :-) – 2015-04-03 20:58:57

1

在數學上:
RoundANumberDownward(total * 20)/20 //does Floor function exist in JS?

但也有數值的問題 - 最真實的數字could not be exactly represented in float formats,使123.45存儲像123.449999999996,所以四捨五入可能會產生意想不到的效果。

Upd: 您在註釋中注意到您需要總計算的舍入值。那麼你最好使用20 * X 整數值(精確算術)進行所有計算,然後分割和舍入最終結果!