使扣除结果包含2位小数

Posted

技术标签:

【中文标题】使扣除结果包含2位小数【英文标题】:Make deduction result contain 2 decimal places 【发布时间】: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

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

【问题讨论】:

【参考方案1】:

99.9099.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 这取决于你

以上是关于使扣除结果包含2位小数的主要内容,如果未能解决你的问题,请参考以下文章

在C++中怎样使输出值保留三位小数

怎么使float保留两位小数或多位小数

python中怎样输入一个包含小数的小写金额(整数部分不超过7位),将其转换为汉字大写金额,最后输出结果?

vb.net 怎样使计算结果只保留四位小数?

bigdecimal长度包含小数位吗

验证输入的是否是数字小数,包含保留几位小数