मैं जावास्क्रिप्ट में एक संख्या को गोल करना चाहता हूं लेकिन 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 पर ठीक कर देगा।

किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

1
vpp090 12 सितंबर 2019, 14:12

4 जवाब

सबसे बढ़िया उत्तर

आप जाँच सकते हैं कि क्या निश्चित मान बदलता है और स्वरूपण के प्रकार का चयन करें।

function format(f) {
    return f === +f.toFixed(2)
        ? f.toFixed(2)
        : f.toString()
}

console.log([4.5, 3.331, 3].map(format));
3
Nina Scholz 12 सितंबर 2019, 14:23

यह एक स्ट्रिंग प्रारूप की तरह दिखता है न कि एक गोल समस्या:

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

0
Phyrum Tea 12 सितंबर 2019, 15:26

आप सशर्त 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);
0
Mosè Raguzzini 12 सितंबर 2019, 14:28

रेगेक्स का उपयोग करके डॉट के बाद अंकों की जांच करें। यदि यह 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)
1
Janie 12 सितंबर 2019, 14:33