重複の可能性:
JavaScript の数学は壊れていますか?
ユーザーは最初の 2 つのテキスト ボックスに値を入力します。入力すると、Javascript (申し訳ありませんが、jQuery は使用できません。まだできていません) を使用して正確な合計が計算され、合計が 2 桁に丸められます。
丸め誤差が発生するのはなぜですか? また、それを修正するにはどうすればよいですか?
どうもありがとう。
うーん....パースフロート?データ型が間違っていませんか?
まるで電卓で足し算したかのような正確な答えが見たいものです。使用できる parseDecimal またはその他のデータ型はありますか?
![ここに画像の説明を入力][1]
function SumValues() {
//debugger;
var txtSubsContrRbtAmt = document.getElementById("<%=txtSubsContrRbtAmt.ClientID%>");
var txtDeMinAmt = document.getElementById("<%=txtDeMinAmt.ClientID%>");
var txtTotRbtAmt = document.getElementById("<%=txtTotRbtAmt.ClientID%>");
var txtRndRbtAmt = document.getElementById("<%=txtRndRbtAmt.ClientID%>");
var total = Add(txtSubsContrRbtAmt.value, txtDeMinAmt.value);
txtTotRbtAmt.value = total;
txtRndRbtAmt.value = RoundToTwoDecimalPlaces(total);
}
function Add() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
var currentValue;
if (isNumber(arguments[i])) {
currentValue = parseFloat(arguments[i]);
}
else {
currentValue = 0;
}
sum += currentValue;
}
return sum;
}
function RoundToTwoDecimalPlaces(input) {
return Math.round(input * 100) / 100
}
function IsNumeric(input) {
return (input - 0) == input && input.length > 0;
}
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
[1]: http://i.stack.imgur.com/5Otrm.png
アップデート。私はこのようなものを評価しています:
function AddWithPrecision(a, b, precision) {
var x = Math.pow(10, precision || 2);
return (Math.round(a * x) + Math.round(b * x)) / x;
}