मैं जावास्क्रिप्ट में एक संख्या को गोल करना चाहता हूं लेकिन 2 decimal
स्थानों पर लेकिन केवल यदि आवश्यक हो।
उदाहरण के लिए 4.5
का 4.50
होना और 3.331
का 3.331
होना।
मैंने Math.round(number / 100) * 100
का उपयोग करने की कोशिश की है, लेकिन जब संख्या 4.5
है तो यह मुझे 4.5
देता है और मैं चाहता हूं कि यह 4.50
हो।
मैंने .toFixed(2)
का उपयोग करने का प्रयास किया है, लेकिन जब संख्या 3.331
होगी तो यह इसे 3.33
पर ठीक कर देगा।
किसी भी प्रकार की मदद की बेहद सराहना की जाती है।
4 जवाब
आप जाँच सकते हैं कि क्या निश्चित मान बदलता है और स्वरूपण के प्रकार का चयन करें।
function format(f) {
return f === +f.toFixed(2)
? f.toFixed(2)
: f.toString()
}
console.log([4.5, 3.331, 3].map(format));
यह एक स्ट्रिंग प्रारूप की तरह दिखता है न कि एक गोल समस्या:
var value = 4 + '.';
var [num, dec] = value.split('.');
if (dec.length < 2) {
dec = (dec + '00').substring(0, 2);
}
console.log(`${num}.${dec}`);
चलने योग्य स्निपेट:
function format(value) {
var [num, decimal] = (value + '.').split('.');
if (decimal.length < 2) {
decimal = (decimal + '00').substring(0, 2);
}
return `${num}.${decimal}`;
}
console.log([4, 4.5, 3.331].map(format));
4 -> 4.00
४.५ -> ४.५०
3.331 -> 3.331
आप सशर्त toFixed()
विधि लागू करने का प्रयास कर सकते हैं:
const numbers = [4.5, 3.331];
const floated = numbers.map(
n => {
const floatLen = n.toString().split('.')[1];
if(floatLen){
if(floatLen.toString().length < 2){
return n.toFixed(2);
}
}
return n;
}
);
console.log(floated);
रेगेक्स का उपयोग करके डॉट के बाद अंकों की जांच करें। यदि यह 2 से कम है तो toFixed(2)
का प्रयोग करें, अन्यथा कुछ न करें।
function f(n) {
let diff = Number(n) - Math.floor(Number(n));
return /\.[0-9]{2,}/.test(diff.toString()) ? n : n.toFixed(2)
}
const nums = [3.331, 2.5, 3].map(f)
console.log(nums)