javascript - 为什么我不能在不丢失 JS 精度的情况下将字符串转换为数字?
问题描述
我们都知道+, Number()
并且parseInt()
可以将字符串转换为整数。
但就我而言,我得到了非常奇怪的结果。
我需要将字符串转换'6145390195186705543'
为数字。
let str = '6145390195186705543';
let number = +str; // 6145390195186705000, but should be: 6145390195186705543
有人可以解释为什么以及如何解决它吗?
解决方案
我猜这是为了解决 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;
};
推荐阅读
- node.js - 使用 Paginate-v2 插件在数据表中搜索
- javascript - 如何在 ember 中为类属性编写 CSS Conditional?
- react-native - 如何在本机反应中发送客户端密钥和秘密进行身份验证
- google-apps-script - 发布 Google 表格插件
- ios - 在 iOS 中将错误日志消息解析为字符串
- javascript - Docker 代替 rvm、nvm 和所有其他
- google-apps-script - 如何将特定工作表中 A1 范围内的 URL 设置为变量?
- java - 为什么我的程序会跳过替换方法?
- jquery - 如何检测机器是否空闲,15 秒内没有来自服务器的值?
- sql - 谁禁用了 SQL Server 代理中的作业