百科问答小站 logo
百科问答小站 font logo



如何看待新闻“共享单车骑完忘锁欠费两千万”? 第1页

  

user avatar   li-maskr 网友的相关建议: 
      

前两天这个新闻刚出来的时候正好跟同事在加班,作为挨踢业内人士,不屑一看:不就是个数据上的bug嘛,有什么大惊小怪的。

然后就忙着加班去了。


好,今天我们就来解释一下,为什么会欠费两千多万?

我们先来看新闻截图,

嗯,两千多万,准确来说是-21474778.00元,两千一百四十七万四千七百七十八元。


这个数字在普通人看来觉得没什么奇怪的对吧?

但是在程序员看来这个数字几乎是一个整数,为什么呢?

让我们以16进制输入0xFFFFFFFF (8个F)


十六进制下是FFFFFFFF(8个F)

二进制下是1111 1111 1111 1111 1111 1111 1111 1111(32个1)

那么在常规的十进制下又是什么呢?



诶,是4294967295啊,没看出啥异常啊。

桥豆麻袋,别急。

我们把这个数字除以2,得到:


这个数字很熟悉了吧。

再除以100,保留两位小数,得到:

21474836.47

再来看看我们的欠费金额:

21474778.00

就差了58块4毛7分嘛。


我们知道计算机在处理数字时,会以0和1来表示正负,而首位的1则表示“-”即负号。

那么在这里,二进制下的“32个1”,其准确的数据应该为:

-111 1111 1111 1111 1111 1111 1111 1111(31个1)

而这个数字恰好就是-2147483647,

而表示金额的时候保留两位小数,这不就结了,没啥大惊小怪的。


至于为什么会差了58.47元,呃...我怎么知道,大概是户主账户里本来就有五十八块四毛七吧。

管他呢,搬砖去了。

哦对了,麻烦建行农行工行招行各大银行像这样的数据BUG给我来一打,我马上辞职不干了。




最后来一波尴尬而不失礼貌的广告:




user avatar   li-wan-qi-84 网友的相关建议: 
      

简单说一下,学过编程的人看到这个数字就会反应过来,这不就是32位有符号整形的最大值么?所以简单说问题的原因就是摩拜的程序员在某个环节没有考虑数值越界的问题。

下面科普一下:在C语系编程语言(C、C++、C#、Java等)中,int是一种整数数据类型定义的标示符,范围[-2^31 , 2^31 -1] 即 [-2147483648,2147483647]。这个钱还真跟最大值有点关系。2147483647,如果单位是分,整数部分就是21474836元。而这件事儿里的21474778,跟int最大值21474836就差58块钱。也就是说,摩拜后台钱很可能是以分为单位的int型值。

~~~~~~~~~~~~~~~

有人问int是怎么越界的,我还是简单讲一下。计算机内部运算是用的补码形式运算,32位int最大2147483647也就是0111111…1,对它加一个一就越界了,就变成了1000000…0。讲道理这个数应该是-0,但是自然数是没有-0的,大家就规定这个数为-2147483648(我是这样理解的,愚见,求指正),这也就是为什么显示-2147483648。




  

相关话题

  父母因大意把孩子遗忘在车内致死,父母为什么没有被提起公诉? 
  成都「吼堂老火锅」控诉郑恺新开的「火凤祥」火锅店抄袭,二者装修非常相似,会构成侵权吗? 
  以举报他人犯罪迫使其还钱的方式可行吗? 
  如何评价网红雷探长带领外国人在陕西榆林进入丹霞地貌,肆意踩踏拍摄视频并无视「禁止入内」的牌子? 
  高速公路用来融冰的工业盐被人拿走食用,万一以后出事,政府方面会有责任吗? 
  马来西亚逮捕680名中国人 涉嫌网络诈骗,大家怎么看? 
  如何看待 Soul 运营合伙人在竞争对手平台故意散布违规信息,并进行恶意举报后被批捕?反映了哪些问题? 
  怎样看待迈阿密塌楼幸存者及遇难者家属有可能获至少 1.5 亿美元初步赔偿(如果卖地这能卖一个亿)? 
  上海肿瘤事件判了,这样的处罚能带来警示作用吗?各大专家是否还支持陆医生? 
  如何看待「广西 10 岁男孩偷钱被抓,遭困猪笼浸水塘」? 

前一个讨论
新婚中感到强烈的孤独,为此极为不适,应该怎么做?
下一个讨论
收入超过父母是种怎样的体验?





© 2024-06-02 - tinynew.org. All Rights Reserved.
© 2024-06-02 - tinynew.org. 保留所有权利