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');
}
}
}
有沒有更好的方式來做到這一點?感謝您的期待。
如果您執行console.log(total),您將獲得的值是多少;每個完成後?它等於100嗎?我在問,因爲我想知道如果添加不起作用(舍入錯誤)或如果檢查工作不正確 – MikeScott8
'formatCurrency'的來源是什麼? – Philipp
這就是電腦的工作原理。浮點數是基數2的數量,精度有限,不一定映射到基數爲10的數字。 –