使扣除结果包含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.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 这取决于你以上是关于使扣除结果包含2位小数的主要内容,如果未能解决你的问题,请参考以下文章