हैरानी की बात है कि यह फ़ंक्शन अभी तक पोस्ट नहीं किया गया है, हालांकि अन्य में इसके समान विविधताएं हैं। यह Math.round () के लिए MDN वेब डॉक्स से है। यह संक्षिप्त है और अलग-अलग परिशुद्धता के लिए अनुमति देता है।
function precisionRound(number, precision) {
var factor = Math.pow(10, precision);
return Math.round(number * factor) / factor;
}
कंसोल.लॉग (परिशुद्धता राउंड (1234.5678, 1)); // अपेक्षित आउटपुट: 1234.6
कंसोल.लॉग (परिशुद्धता राउंड (1234.5678, -1)); // अपेक्षित आउटपुट: 1230
var inp = document.querySelectorAll('input');
var btn = document.querySelector('button');
btn.onclick = function(){
inp[2].value = precisionRound( parseFloat(inp[0].value) * parseFloat(inp[1].value) , 5 );
};
//MDN function
function precisionRound(number, precision) {
var factor = Math.pow(10, precision);
return Math.round(number * factor) / factor;
}
button{
display: block;
}
<input type='text' value='0.1'>
<input type='text' value='0.2'>
<button>Get Product</button>
<input type='text'>
अद्यतन: अगस्त / 20/2019 बस इस त्रुटि को देखा। मेरा मानना है कि यह Math.round () के साथ फ्लोटिंग पॉइंट प्रिसिजन एरर के कारण है।
precisionRound(1.005, 2) // produces 1, incorrect, should be 1.01
ये स्थितियाँ सही ढंग से काम करती हैं:
precisionRound(0.005, 2) // produces 0.01
precisionRound(1.0005, 3) // produces 1.001
precisionRound(1234.5, 0) // produces 1235
precisionRound(1234.5, -1) // produces 1230
ठीक कर:
function precisionRoundMod(number, precision) {
var factor = Math.pow(10, precision);
var n = precision < 0 ? number : 0.01 / factor + number;
return Math.round( n * factor) / factor;
}
यह केवल दशमलव को दाईं ओर एक अंक जोड़ता है। MDN ने Math.round पेज अपडेट किया है ताकि शायद कोई बेहतर समाधान दे सके।
0.1
एक परिमित बाइनरी फ्लोटिंग पॉइंट संख्या में मैप करने का कोई तरीका नहीं है ।