如何从字符串中获取支持小数的最接近的数字?(Javascript)

uxhixvfz  于 2023-01-16  发布在  Java
关注(0)|答案(2)|浏览(91)

假设我有一个字符串

'6,18284828814828481'

Javascript数字确实支持一定数量的小数。从我所看到的,我应该返回这样的东西:

6.182848288148285

有没有办法把字符串转换成最接近的有效数字?
我尝试做的是这样的事情:

const limitDecimals = (num: string): string|number => {
let maxDecimalDigits = 17;
for(let i = maxDecimalDigits; i >= 0; i--) {
  let [integerPart, decimalPart] = num.split('.');
  if(decimalPart){
    decimalPart = decimalPart.slice(0, i);
    if(decimalPart.length > 0) {
      return`${integerPart}.${decimalPart}`;
    }
  }else{
    return integerPart;
  }
}
return num;
}

注意:由于它还不起作用,因此未转换为数字

92vpleto

92vpleto1#

parseFloat(string)应该为你想要的工作?
您可以将字符串'6,18284828814828481'中的“,”(逗号)替换为.“”,并传递给parseFloat:

var result = window.parseFloat('6,18284828814828481'.replace(",", "."));
//expected result: 6.182848288148285
q8l4jmvw

q8l4jmvw2#

不幸的是,默认情况下,js不够精确,无法让您操作带有大量小数的数字。
一种方法是使用decimal.js等示例的外部库

const data = '6,18284828814828481';
const limitDecimals = function(num, precision) {
  num = new Decimal(num.replace(',', '.'));
  return num.toPrecision(precision);
}

console.log(limitDecimals(data, 17));
console.log(limitDecimals(data, 16));
console.log(limitDecimals(data, 15));
console.log(limitDecimals(data, 14));
<script src="https://cdnjs.cloudflare.com/ajax/libs/decimal.js/9.0.0/decimal.min.js" integrity="sha512-zPQm8HS4Phjo9pUbbk+HPH3rSWu5H03NFvBpPf6D9EU2xasj0ZxhYAc/lvv/HVDWMSE1Autj19i6nZOfiVQbFQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

相关问题