【问题标题】:PHP 7.1 Currency CalculationsPHP 7.1 货币计算
【发布时间】:2018-11-12 08:28:08
【问题描述】:

我已更新到 PHP 7.1,这个简单的计算现在返回“遇到格式不正确的数值”错误

    $balance = "-16,438.56";
    $amount = "1000.00";

    return $balance-$amount;

我需要帮助了解如何管理此问题 谢谢

【问题讨论】:

  • 这两个都是字符串!
  • 这是一个从输入中提取的示例,可以在以前的 PHP 版本中使用
  • 我会说 "-16,438.56" 格式不正确,因为逗号。

标签: php laravel


【解决方案1】:

您可以将其转换为浮点值。

$balance = -16438.56;
$amount = 1000.00;

echo $balance-$amount;

$ -17438.56

【讨论】:

    【解决方案2】:

    您需要从 $balance 中删除逗号。

    $balance = "-16438.56";

    【讨论】:

    • 谢谢,这似乎可行,其他建议,如 (float) 返回不正确的计算。这似乎在 PHP V 7.1 及更高版本中发生了变化
    • 输出永远不会与您提供的确切输入正确。请参考sandbox example 并查看所有包含的 PHP 版本。
    【解决方案3】:

    您的余额中有逗号,因此请先删除逗号。如果您想确定,也可以输入提示。

    $balance = str_replace(',','',$balance);
    return (float) $balance - (float) $amount;
    

    【讨论】:

    • 这在使用逗号表示小数的语言环境中中断。
    • @BartFriederichs 那么你必须删除逗号进行计算,因为PHP的浮点类型与那些逗号不兼容,然后在计算后重新添加逗号,呵呵。我们有一个函数来做这件事,叫做 number_format()
    【解决方案4】:

    php 的- 运算符可以为您隐式转换字符串为浮点数,但该转换与千步逗号不兼容,因此请去掉逗号,进行计算,并在计算后重新添加逗号,例如

    $balance = "-16,438.56";
    $amount = "1000.00";
    return number_format ( (( float ) (str_replace ( ",", "", $balance ))) - (( float ) (str_replace ( ",", "", $amount ))), 2, ".", "," );
    

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 1970-01-01
      • 2012-05-15
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多