0

我在用

$p1 = 66.97;

$price1  = $row['Value']*$p1;
$price1 = number_format($price1, 2, '.', '');

做一个简单的计算,然后将价格显示到小数点后 2 位。这很好用。我想将结果四舍五入到最接近的.05. 所以18.9318.9519.5719.60等等。关于这个的任何想法 - 我都在挣扎。谢谢。

4

5 回答 5

1

您可以执行以下操作:

$price = ceil($p1*20)/20;

你需要四舍五入到0.05; ceil 通常向上取整1;所以你需要将你的数字乘以 20 ( 1/0.05 = 20) 以允许 ceil 做你想做的事,然后除以你想出的数字;

请注意浮点运算,您的结果可能真的是 12.949999999999999999999 而不是 12.95;所以你应该将它转换为字符串,sprintf('%.2f', $price)或者number_format在你的例子中

于 2013-09-28T09:21:07.247 回答
0

将你的答案乘以 100,然后除以 5。如果余数小于 3,则减去余数,否则加(5 - 余数)。接下来,除以 100 得到最终结果。

于 2013-09-28T09:16:50.610 回答
0

尝试:

function roundUpToAny($n,$x=5) {
    return round(($n+$x/2)/$x)*$x;
}

i.e.:

echo '52 rounded to the nearest 5 is ' . roundUpToAny(52,5) . '<br />';
// returns '52 rounded to the nearest 5 is 55'
于 2013-09-28T09:21:01.240 回答
0
$price = ceil($price1 * 20) / 20;
于 2013-09-28T09:21:03.570 回答
0

使用以下代码:

// First, multiply by 100
$price1 = $price1 * 100;
// Then, check if remainder of division by 5 is more than zero
if (($price1 % 5) > 0) {
    // If so, substract remainder and add 5
    $price1 = $price1 - ($price1 % 5) + 5;
}
// Then, divide by 100 again
$price1 = $price1 / 100;
于 2013-09-28T09:22:11.777 回答