php中带有大数字的numberformat错误
Posted
技术标签:
【中文标题】php中带有大数字的numberformat错误【英文标题】:numberformat error with bigs numbers in php 【发布时间】:2018-11-16 15:22:10 【问题描述】:我正在开发电子商务,当我想使用 number_format() 格式化数字时遇到问题。
我必须为我的 Stripe 连接设置一个不带小数的数字,所以当我进行所有计算以获得购物车的最终价格时,我会这样做:
$final_amount = number_format($final_amount, 2) * 100;
结果是 Stripe 可以理解的数字。我对小数字没有任何问题(例如 970.25 或 1300.75),但是当我有像 15717.72 这样的大数字时,php 会抛出错误“遇到格式不正确的数值”。我不知道这是不是问题,大数字。
我之前尝试使用 floatval() 解析 $final_amount,但它也没有运行。
有人知道这个问题吗?谢谢:)
【问题讨论】:
number_format() 默认返回一个以逗号分组的字符串。 “使用 floatval() 并且它也没有运行。”到底是什么意思? 发生了什么?在我看来,它会产生一个有效的结果,所以你需要清楚它在什么方面不是你想要的。 【参考方案1】:几个笔记。
“遇到格式不正确的数值”是通知,而不是错误。
我不相信 1300.75 适合你。我不相信这是因为你只给number_format 两个参数。您收到该通知是因为 number_format 正在使用千位分隔符“,”来格式化您的号码。
$final_amount = number_format($final_amount, 2, ".", "") * 100;
应该采取措施删除该通知。
【讨论】:
【参考方案2】:问题不是 number_format() 函数,而是你的计算。您正在将字符串与整数相乘。效果不太好。
$final_amount = number_format($final_amount * 100, 2);
工作得很好。
更新: 我的结论并不完全正确。如果字符串可转换为 int 或 float,则将 int 与字符串相乘确实有效(请参阅 PHP 手册中的 type juggling)。但是 number_format() 创建的字符串看起来像这样:“15,717.72”。因此不能转换为数字类型。
【讨论】:
以上是关于php中带有大数字的numberformat错误的主要内容,如果未能解决你的问题,请参考以下文章
Java 中非默认语言环境的 NumberFormat 解析不正确
Java—NumberFormat与DecimalFormat类