【问题标题】:Make deduction result contain 2 decimal places使扣除结果包含2位小数
【发布时间】:2016-01-30 22:18:47
【问题描述】:

我正在从数据库中导入价格。 价格值最初包含 2 位小数。

我想从每个价格值中扣除相关的运费,并将结果保留为小数点后两位。

代码:

while($row = $result->fetch_assoc()) {

    $product_name = $row['Name'];

    $keys = array_keys($item_array, $product_name);
    foreach ($keys as $x) 

    $product[$x]["total_price"] = $row['price'];
    $product[$x]["shipping"] = $row['shipping'];
    $product[$x]["base_price"] = ($row['price']-$row['shipping']); // Calculation

目前,我不确定它是如何工作的,但何时:

$product[1]["price"] = 99.90

我要扣除的相关运费是0, 结果是99.9 而不是99.90。

保留两位小数的最佳做法是什么?

【问题讨论】:

    标签: php number-formatting


    【解决方案1】:

    99.90 是99.9 的格式化输出。要获得数字的常量格式,你必须通过number_format输出-it,这样:

    echo number_format ( $product[1]["price"], 2 );
    

    参数2是要打印的小数位数。

    请注意:这个函数的结果是一个字符串,不是数字;该函数旨在打印输出,而不是用于数学。

    在官方PHP Documentation可以看到如何设置其他参数,比如小数点分隔符和千位分隔符。

    【讨论】:

    • 但是我怎样才能将$product[$x]["base_price"] 格式化为提前格式化,以便在我回显它的每个实例中,它都会立即被格式化?
    • 是的,如果您不使用它进行计算。所以,你可以做$product[1]["price"] = number_format( $product[1]["price"], 2 )
    • money_format 或 NumberFormatter::formatCurrency 可能会更好
    • @rjdown 你能详细说明一下吗?
    • 它们更适合货币格式。例如,日元没有小数位,因此您不想盲目添加它们。这些方法还将在正确的位置添加适当的货币符号。一个很好的例子是加元符号,它会根据您的语言环境(例如 en_CA 或 fr_CA)从左侧更改为右侧
    【解决方案2】:

    您始终可以使用sprintf() 来格式化数字和字符串。

    你可以这样做

    $product[$x]["base_price"] = sprintf("%.2f",($row['price']-$row['shipping']));

    【讨论】:

    • 这会自动打印吗?因为在这个阶段我不想打印任何东西,只是为数据库中的每一行创建一个新的$product[$x]["base_price"] 变量。
    • 请注意,在数据库中它可能会保持没有 0,因为您的数据库引擎可能会忽略它,但在输出中您可以添加此行
    • @Gal 这是印刷品,是的,是印刷品! (见documentation)使用sprintf返回一个变量而不是打印它
    • @fusion3k 你说得对,我编辑了我的答案。对此感到抱歉。
    • @rockyraw 这取决于你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2020-04-20
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多