【问题标题】:Dealing with floating points/decimals in PHP在 PHP 中处理浮点/小数
【发布时间】:2013-12-28 02:05:47
【问题描述】:

我正在构建一个 Web 应用程序,该应用程序处理一些可能会不时变化的货币/价格。为方便起见,我有一个config.php,它是必需的并包含一些定义:

define('PRODUCT_PRICE', 2000.00);

define('PRODUCT_PRICE_WITH_GST', PRODUCT_PRICE * 1.1);

当潜在客户进入结账流程时,我将价格显示如下:

<?php echo(PRODUCT_PRICE_WITH_GST); ?>

我原以为它会打印为2200.00,但它会去掉小数点并显示为2200

处理此问题的最佳做法是什么?

【问题讨论】:

  • 您的意思是2200 而不是2200.00?还是2000 而不是2200.00
  • 2220 - 我的错。编辑问题以反映实际问题。

标签: php rounding currency


【解决方案1】:

我会使用 number_format:http://php.net/number_format

如果你 var_dump() 你的常量,你会看到它的内部表示是一个双精度,它只是你如何显示它的一种方式。

【讨论】:

    【解决方案2】:

    看看函数sprintfprintf 用于各种字符串格式。您的特定问题有以下解决方案:

    printf("%01.2f", PRODUCT_PRICE_WITH_GST);
    

    【讨论】:

    • 谢谢Sharanya。我现在正在测试它,它似乎什么也没返回。
    • 将整行 echo(PRODUCT_PRICE_WITH_GST); 替换为我建议的行。有效吗?
    • 或者,您可以选择echo(sprintf("%01.2f", PRODUCT_PRICE_WITH_GST));,尽管有些人可能认为将echosprintf 结合使用而不是printf 是不好的做法。
    • 我看不出这怎么可能是问题所在。 OP 说打印时没有舍入错误 - 它缺少整整 10% 的整数值 - “2000”而不是“2200”
    • @jsbueno 请允许我引用这个问题(添加斜体以表示强调):“我原以为它会打印为2200.00,但它会去掉小数点 并显示为2000。”在我看来,2000 只不过是一个印刷错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2014-04-10
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    相关资源
    最近更新 更多