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错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP 中带有数字的 Vigenére 密码

Java 中非默认语言环境的 NumberFormat 解析不正确

Java `NumberFormat` 假定数字类型不正确

Java—NumberFormat与DecimalFormat类

Java 详解数字格式化(NumberFormat&DecimalFormat)

输入 Intl.NumberFormat 时 VueJS 数字格式实时以逗号分隔