wopelo 2017-09-25 14:56 采纳率: 0%
浏览 1225

超过16位且最后一位是1的整数会出现一个奇葩的问题

之前在牛客做笔试题时发现了这样一个问题 :
定义c为10011100011101111的字符串,不管是显示转换还是隐式转换最后出来的数字都是10011100011101112
图片说明
更进一步实验发现,把10011100011101111赋予变量oo,再输出oo,结果为10011100011101112
图片说明
目前通过实验发现超过16位且最后一位是1的整数在字符串/数字相互转换的时候会出现问题,并且出现问题的直接原因是定义之后这些数字会比原值多1,但这个范围并没有超出js能够表示的最大范围
一下几个数大家可以试一下
10001000101111011
10001000111011111
10011100011101111
10101111110010001
10101111110101111

发现这个问题的笔试题是牛客网上《2017校招真题编程练习》中有一道来自京东的《幸运数》,题目要求找出这样子的十进制数:十进制下每一位的和等于转为二进制后每一位的和。在解题的过程中发现有些十进制的数在转二进制后两种表示方式表示出来的值不一样——这样就是为什么前面举的例子中的数字看起来都像二进制数。

  • 写回答

1条回答 默认 最新

  • I1326 2017-09-26 08:07
    关注

    这个蛋疼的问题是因为javascript没有long类型,不支持高精度运算是2的多少次方我忘记了,有兴趣你可以查一下,超过这个限制后js就抽了

    评论

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试