2013-11-25 29 views
1

我似乎無法找到在我的代碼中有兩位小數的正確公式。現在,當我點擊關於計算的第一個選項(不是小數點後3位表示任何內容,但是不管結果如何,它應該舍入到小數點後兩位)時,小數點後三位。這是我最後一次嘗試:舍入兩位小數 - 找不到合適的公式

$('#a_is_valid').one('click', function(){ 
    if ($('#code_promo').val() == 'promocode') 
     {$('#gtotal').val($('#gtotal').val()-($('#gtotal').val()-   
      (($('#gtotal').val()*.75)))).fixed(2); 

    } 
}) 
+0

jQuery的沒有一個'.fixed()'方法把它建成了,看來,谷歌顯示,使用該方法插件是用於定位的東西在頁面上,不指定小數點(數學)。 –

+0

我不知道,因爲沒有它,我得到39而不是39.00。 –

回答

2

給定一個數(或字符串代表一個數字),爲什麼不只是這樣做:

var number; 
var output = (Math.round(number * 100)/100).toFixed(2); 

在你的情況下,它看起來像你想:

$('#a_is_valid').one('click', function(){ 
    if ($('#code_promo').val() == 'promocode') 
     {$('#gtotal').val((Math.round($('#gtotal').val() * 75)/100).toFixed(2)); 

Math.round(恰當地)輪到最接近的整數,所以你必須做一些魔術。乘以10 ^(你想要的小數位數) - 在你的情況下,10^2或100,舍入,然後除以相同的數字。

在我專門爲你做的例子,你會通過75多次通知我:0.75 * 100

這可能是最簡單的這種使用功能看:

function roundToNPlaces(n, val) { 
    var multiplier = Math.pow(10, n); 
    return (Math.round(val * multiplier)/multiplier).toFixed(n); 
} 

然後你可以簡單地設置您的gtotal如下:

$('#gtotal').val(roundToNPlaces(2, $('gtotal').val() * 0.75)); 

看到這個FIDDLE

請參見:

  • Math.round注意:本文檔提供類似(但不是更復雜)實現了我的代碼。如果您將其整個Decimal rounding示例複製到您的代碼中(在第一次需要使用它之前),則可以使用Math.round10($('#gtotal').val() * .75, -2);。見http://jsfiddle.net/aW44n/1/
  • toFixed
+0

這很好用。雖然不是四捨五入到38.81(由於38.805),但它達到了39.00。我認爲math.round會圍繞兩位小數,而不是整個事情四捨五入? –

+0

@KungFuFrontEnder啊。我沒有想到這一點。請繼續,讓我進行編輯。 –

+0

@KungFuFrontEnder看看我的編輯,這應該是你需要的。 –