PHP:舍入到最接近的0.05货币值

时间:2015-09-02 20:51:58

标签: php

我正在尝试解决这个问题:

  

当我购买物品时,我会收到一张收据,上面列出了所有物品的名称   项目及其价格(含税),以总额结束   物品的成本,以及支付的销售税总额。该   销售税的四舍五入规则是税率为n%的货架   p的价格包含(np / 100四舍五入到最接近的0.05)金额   销售税。

所以,......我在php中有价格:

$value = 11.25;

我不明白为什么

var_export(ceil($value * 0.05 * 10));

返回6并除以10,结果为

var_export(ceil($value * 0.05 * 10) / 10);

0.59999999999999998

一些不错的实验:

php > echo bcmul(11.25, 0.05, 3);
0.562
php > echo bcmul(ceil(11.25), 0.05, 3);
0.60

1 个答案:

答案 0 :(得分:2)

你可以阅读主教指出的内容,也可以阅读this以了解问题所在。

现在谈论一个解决方案,你可以使用PHP BCMath扩展名,当你想使用精确的数学数字时应该使用它

  

对于任意精度数学,PHP提供二进制计算器   它支持任何大小和精度的数字,表示为   字符串。

一个解决方案(一个丑陋的解决方案)可能就是这个

FileInfo[] FileCheck = default(FileInfo[]);
if (chbSubFolder.Checked == false)
    FileCheck = Dir.GetFiles(string.Format("*.{0}", extention));
else
    FileCheck = Dir.GetFiles(string.Format("*.{0}", extention), SearchOption.AllDirectories);

我在这里使用上述扩展程序中的 bcdiv