2014-01-28 13 views
0

我有一個有趣的問題,我想與大家分享。在表單上,​​我們有百分比分配的重複行。最後所有行的總和需要等於100.000(或100%)。如果確實如此,它會通過驗證並提交表單。我們要求輸出3個小數點。使用特定組合計算和驗證100.000時出錯

但是,通過以下組合,表單不能滿足驗證。這真的很奇怪。

  • 行1:63.877
  • 行2:34.286
  • 第3列:1.837
  • 總共= 100.000

HTML

<!-- Repeating Field in Rows --> 
<input type="text" name="txtDistributionPerc" id="txtDistributionPerc" 
onkeypress='return chkKeys(event, "C");' maxlength="7" 
onblur="txt_blur_calculateFundingTotal(this);"></input> 

的JavaScript JQu ERY

// Filters out invalid keystrokes 
function chkKeys(e,type){ 
    var keynum = e.keyCode; 
    var keychar = String.fromCharCode(keynum); 

    switch (type){ 
     case 'C': /* currency ($, numbers, .) */ 
      valChk = /[0-9\$\.]/; 
      return valChk.test(keychar); 
      break; 
     default: 
      break; 
    } 
} 

//Calculates a specific one based on the element passed 
function txt_blur_calculateFundingTotal(ele) 
{ 
    if(ele) 
    { 
     var total = 0.000; 
     $(ele).closest('table').find('input[name=txtDistributionPerc]').each(function (i) { 
      this.value = formatCurrency(this.value, 3, '.', ''); 
      var tmp = parseNumber(this.value); 
      if(tmp < 0.000 || tmp > 100.000) { 
       this.value = '0.000'; 
       tmp = 0.000; 
      } 
      total+=tmp; 
     }); 
     $(ele).closest('table').find('input[name=txtTotalPerc]').val(formatCurrency(total, 3, '.', '')); 
     if(total != 100.000 && total != 0.000) 
     { 
      $(ele).closest('table').find('input[name=txtTotalPerc]').addClass('error'); 
      $(ele).closest('table').find('input[name=txtTotalPercValidated]').val(''); 
     } 
     else 
     { 
      $(ele).closest('table').find('input[name=txtTotalPerc]').removeClass('error'); 
      $(ele).closest('table').find('input[name=txtTotalPercValidated]').val('true'); 
     } 
    } 
} 

有沒有更好的方式來做到這一點?感謝您的期待。

+0

如果您執行console.log(total),您將獲得的值是多少;每個完成後?它等於100嗎?我在問,因爲我想知道如果添加不起作用(舍入錯誤)或如果檢查工作不正確 – MikeScott8

+0

'formatCurrency'的來源是什麼? – Philipp

+3

這就是電腦的工作原理。浮點數是基數2的數量,精度有限,不一定映射到基數爲10的數字。 –

回答

0

將數值乘以1000並使用整數。

它似乎必須與浮點值。

祝你好運!