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



假设我有一个这样的字符串:

'6,18284828814828481'

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

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;
}

注意:这不能在Number中转换,因为它还不能工作

parseFloat(string)应该为您想要的工作?

您可以将','(逗号)替换为'。' at string'6,18284828814828481'并传递给parseFloat

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

不幸的是,在默认情况下,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>

相关内容

  • 没有找到相关文章

最新更新