我对 php 中的 round() 有一点问题。我不知道,如果我真的做对了。(是订货系统)
$amount 可以是十进制 14,8 $price 可以是十进制 10,5(在数据库中)
我现在使用以下四舍五入 $price 是一个 $amount
function round_amount($amount) {
return (float) round($amount, 8);
}
function round_price($amount) {
return (float) round($amount, 5);
}
//if some one have more decimal chars like 10.000000009
round_amount(10.000000009); //will be 10.00000001
//if some one have more decimal chars like 10.000009
round_price(10.000009); //will be 10.00001
//also this is possible
round_price(round_amount(10.000000009)*round_price(10.000009))
这种方式使用round正确吗?一些用户使用超过 16 位小数。我在用户数据库中扣除/添加结果。
但我看到,有些用户的 5-10 美分太多了!
解决这个问题的唯一方法是只允许 8 位和 5 位小数吗?并警告用户,如果他尝试使用更多?但是我会遇到 round_cur(round_amount(10.000000009)*round_cur(10.000009)) 的问题
我希望有人理解我的意思,或者可以告诉我,如果我的四舍五入方法是正确的。
$amount = 10.12398413498579889173459873;
$price = 5.1938457198347695;
echo round_cur(round_amount($amount)*round_cur($price))."<br />";
echo round_cur($amount*$price);
//returns
//52.58245
//52.58241
有趣的!