javascript - parseInt()对科学计数法表示的数值格式化的困惑

查看:110
本文介绍了javascript - parseInt()对科学计数法表示的数值格式化的困惑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var a = parseInt(0.27632590162620094e+21);
var b = parseInt(0.27632590162620094e+22);
console.log(a,b);

显示的结果完全不一样,为什么?困惑了好久

解决方案

我的理解是这样的:

  1. javascript先对里面的科学表达式进行计算得出结果,那么第一个是整数276325901626200950000,第二个是整数2763259016262009500000。第二个比第一个多一个0,到这里都没有问题。

  2. 由于parseInt()的输入要求是字符串,所以javascript对刚才那两个计算结果做toString()类型转换操作。

    1. 21次方的276325901626200950000,会变成"276325901626200950000"

    2. 22次方的2763259016262009500000,会变成"2.76325901626201e+21"
      这里应该是到21位以上,javascript自动转成科学记数法表示。

  3. parseInt对刚才两个字符串作解析:

    > parseInt("276325901626200950000")
    276325901626200950000
    > parseInt("2.76325901626201e+21")
    2

  4. 为什么后一个是2,很简单了,按parseInt的定义:

    If parseInt encounters a character that is not a numeral in the specified radix, it ignores it and all succeeding characters and returns the integer value parsed up to that point

    也就是说当parseInt发现有字符串中有一个字母不是数字,就把这个字母和后面的都丢弃,相当于parseInt("2.76325901626201"),这样结果自然是2了

这篇关于javascript - parseInt()对科学计数法表示的数值格式化的困惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆