値に対して toFixed 関数を使用してみてください。例は以下のとおりです。
var value = parseFloat(2.185);
var fixed = value.toFixed(2);
alert(fixed);
私は試してみましたが、うまくいきました。
編集: parseFloat(stringVar) を使用して、いつでも文字列を数値に変換できます。
EDIT2:
function myRound(num, places) {
return parseFloat(num.toFixed(places));
}
編集3:
更新された回答、テスト済み、動作中:
function myRound(num, places) {
if (places== undefined) {
places = 2;
}
var mult = Math.pow(10,places + 1);
var mult2 = Math.pow(10,places);
return Math.round(num* mult / 10) / mult2;
}
編集4:
コメントに記載されているほとんどの例でテスト済み:
function myRound(num, places) {
if (places== undefined) {
places = 2;
}
var mult = Math.pow(10,places);
var val = num* mult;
var intVal = parseInt(val);
var floatVal = parseFloat(val);
if (intVal < floatVal) {
val += 0.1;
}
return Math.round(val) / mult;
}
EDIT 5:
私が見つけた唯一の解決策は、文字列を使用して正確な小数を丸めることです。ソリューションは、String プロトタイプ拡張メソッド replaceAt を使用して以下に貼り付けられます。誰かが機能していない例を見つけた場合は、確認してお知らせください。
function myRound2(num, places) {
var retVal = null;
if (places == undefined) {
places = 2;
}
var splits = num.split('.');
if (splits && splits.length <= 2) {
var wholePart = splits[0];
var decimalPart = null;
if (splits.length > 1) {
decimalPart = splits[1];
}
if (decimalPart && decimalPart.length > places) {
var roundingDigit = parseInt(decimalPart[places]);
var previousDigit = parseInt(decimalPart[places - 1]);
var increment = (roundingDigit < 5) ? 0 : 1;
previousDigit = previousDigit + increment;
decimalPart = decimalPart.replaceAt(places - 1, previousDigit + '').substr(0, places);
}
retVal = parseFloat(wholePart + '.' + decimalPart);
}
return retVal;
}
String.prototype.replaceAt = function (index, character) {
return this.substr(0, index) + character + this.substr(index + character.length);
}