【问题标题】:PHP: Comparing amountsPHP:比较金额
【发布时间】:2013-10-14 13:00:00
【问题描述】:

我有一个具有最低交易金额的常数。

define( 'MINIMUM_AMOUNT', 100.00 );

我有一个函数可以从数据库中提取事务并为转移做准备。我要求交易总额大于最小值才能继续。像这样:

foreach( $merchant as $merch ) {

     ......

     foreach( $transactions as $trans ) {
          $trans_total = number_format( $trans_total + $trans->amt, 2 );
     }

     if( $trans_total < MINIMUM_AMOUNT )
          continue;

     .....

}

显然缺少一些代码,但我想你明白这里发生了什么。我遇到的问题是,当我将计算出的总数与常量进行比较时,它返回为true,即使它不是,因此continue 被触发并且脚本的其余部分不运行。

我已经确认 $trans_total 多次大于 MINIMUM_AMOUNT,尝试了各种金额,甚至使用var_dump() 检查变量的type。我无法弄清楚问题是什么。

有什么想法吗?如果有帮助,我将在 LAMP 环境中运行最新版本的 PHP。

注意:

我已经尝试过将两者都进行类型转换,但没有运气。

【问题讨论】:

  • 请展示一些演示问题的示例数据。
  • 尝试将两者都转换为浮动?
  • 你试过不使用number_format()吗?将floatstring 进行比较可能不是您想要做的。
  • 为什么不用 SQL SUM() 提高 trans_total?
  • @djot 我可以,但我需要每一行。

标签: php comparison operators constants


【解决方案1】:

number_format() 是问题所在。这会返回一个string,这会导致比较出现问题。之后键入将$trans_total 转换为float 不起作用,因为字符串中的逗号。

同时删除 number_format() 就可以了。

向@Pj Dietz 致敬。

【讨论】: