首页 > 解决方案 > 为什么我不能在不丢失 JS 精度的情况下将字符串转换为数字?

问题描述

我们都知道+, Number()并且parseInt()可以将字符串转换为整数。
但就我而言,我得到了非常奇怪的结果。
我需要将字符串转换'6145390195186705543'为数字。

let str = '6145390195186705543';
let number = +str; // 6145390195186705000, but should be: 6145390195186705543 

有人可以解释为什么以及如何解决它吗?

标签: javascriptstringnumbers

解决方案


我猜这是为了解决 leetcode 中的 plusOne 问题。正如其他人回答的那样,您不能存储高于最大安全整数的值。但是,您可以编写逻辑来手动添加值。如果要将数组中表示的数字加一,可以使用以下函数。如果您需要添加不同的值,则需要稍微调整解决方案。

var plusOne = function(digits) {
    let n = digits.length, carry=0;
    if(digits[n-1]<9){
        digits[n-1] +=1;        
    } else{
        digits[n-1] = 0;
        carry=1;
        for(let i=n-2;i>=0;i--){
            if(digits[i]<9){
                digits[i]+=1;
                carry=0;
                break;
            }else{
                digits[i]=0;
            }
        }
        if(carry>0){
            digits.unshift(carry);
        }
    }
    return digits;  
};

推荐阅读