• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP怎么将超长数值转换为字符串?

php 搞代码 4年前 (2022-01-25) 35次浏览 已收录 0个评论
文章目录[隐藏]

像银行卡号19或者16位的
$num=9559980799976753217;
输出变成了9.55998079998E+18 这种科学计数

使用下面两种方式也不行。

<code>$str=(string)$num;$str=sprintf("%u",$num);</code>

有什么好的办法没

回复内容:

像银行卡号19或者16位的
$num=9559980799976753217;
输出变成了9.55998079998E+18 这种科学计数

使用下面两种方式也不行。

<code>$str=(string)$num;$str=sprintf("%u",$num);</code>

有什么好的办法没

本身赋值的时候,数值已经溢出了,那么PHP这时候已经做了科学计数法的处理,也就是说此时数据已经部分残缺了。没有解决办法。处理方式就是表创建该字段不应该用数字,而应该用字符串。

echo number_format($num,0,'','');//9559980799976753217

如前所说,赋值的时候精度已丢失,所以只能一开始赋值就使用字符串:

<code>$num=“9559980799976753217”;</code>

<code>PHP</code><code>$num=9559980799976753217;echo number_format($num);//输出9,559,980,799,976,753,152echo str_replace(",","",number_format($num));//输出9559980799976753152</code>

这个答案是错误的.会有精度损失.
网上流传的是通过检测科学计数法,然后重新计算填充的.
目前看来,好像是1L的比较/本2文来源[email protected]搞@^&代*@码2网搞gaodaima代码准确一些

PHP会将溢出的整数转换成double保存

<code><?php$f = 65536*65536*65536*4; // 2^50$f += 1; // 2^50+1$s1 = "$f"; // the usual way$s2 = sprintf ( "%.0f", $f );</code>

赋值的时候精度已经损失了,何谈转换?

超过PHP_INT_MAX了,只能用字符串来代替了。。。

字面值9559980799976753217通过gettype(9559980799976753217)可以发现其是double类型的,所以$num=9559980799976753217;这样直接赋值的代码是无解的。

但是,,,,,LZ你的银行卡号肯定不需要这样直接写死吧?一般应该是从配置文件、数据库、或用户提交的表单中获取的,那肯定本来就是string类型的,那么就直接存成string类型的就o了。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP怎么将超长数值转换为字符串?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址