之前在牛客做笔试题时发现了这样一个问题 :
定义c为10011100011101111的字符串,不管是显示转换还是隐式转换最后出来的数字都是10011100011101112
更进一步实验发现,把10011100011101111赋予变量oo,再输出oo,结果为10011100011101112
目前通过实验发现超过16位且最后一位是1的整数在字符串/数字相互转换的时候会出现问题,并且出现问题的直接原因是定义之后这些数字会比原值多1,但这个范围并没有超出js能够表示的最大范围
一下几个数大家可以试一下
10001000101111011
10001000111011111
10011100011101111
10101111110010001
10101111110101111
发现这个问题的笔试题是牛客网上《2017校招真题编程练习》中有一道来自京东的《幸运数》,题目要求找出这样子的十进制数:十进制下每一位的和等于转为二进制后每一位的和。在解题的过程中发现有些十进制的数在转二进制后两种表示方式表示出来的值不一样——这样就是为什么前面举的例子中的数字看起来都像二进制数。