我有一个执行以下计算的算法:
这样它就可以输入到其余的计算中:
4a。 ( ( 0.76 * 30 ) + 8 ) / 40 = 0.77
并且不在四舍五入到小数点后两位时作为0.77:
4b。 ( ( 0.77 * 30 ) + 8 ) / 40 = 0.77
以下似乎失败了,而是强制四舍五入到0.77:
PHP sptrinf() 函数:PHP 舍去小数而不向上舍入
PHP number_format() 函数: 将数字显示到小数点后两位
PHP Floor() 函数:使用 PHP 截断浮点数
更新-已解决 好的,感谢 dkamins 和 zneak,它现在可以工作了。我使用了 Floor() 方法(我认为我过去没有做正确的事情)。 但是,现在发生了以下情况:
例如
(0.86 * 30) + 9 ) / 40 = 0.87(应该),但在 TRUNC 之后它 = 0.86
如何将 0.87 截断为 0.86?这个不成立。有没有办法让它仅在小数点后两位以上时才截断?
这里给出的所有答案都是围绕数字进行的。 这个功能对我有用,希望对你也有用。
function truncate($number, $decimals)
{
$point_index = strrpos($number, '.');
return substr($number, 0, $point_index + $decimals+ 1);
}
其中
$number
是要截断的数字,$decimals
是您想要的小数位数。
示例: truncate(-38.59540719940386 , 6);
返回 -38.595407
如果需要,请查看 substr 的文档!
您可以使用 PHP 的 floor 函数以及一些小数移位,如下所示:
floor(0.7666666667 * 100) / 100;
如何round()
<?php
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
?>
要准确地对正数 和 负数执行此操作,您需要使用:
php
floor()
+ve 数字函数
php
ceil()
函数用于 -ve 数字
函数 truncate_float($number, $decimals) { $power = pow(10, $decimals); if($数字 > 0){ 返回楼层($number * $power) / $power; } 别的 { 返回 ceil($number * $power) / $power; } }
这样做的原因是
floor()
总是将数字向下舍入,而不是向零舍入。floor()
有效地将 -ve 数字舍入到更大的绝对值floor(1.5) = 1
而 floor(-1.5) = 2
因此对于使用
multiply by power, round, then divide by power
的截断方法:
floor()
仅适用于正数ceil()
仅适用于负数要对此进行测试,请将以下代码复制到 http://phpfiddle.org/lite(或类似)的编辑器中:
<div>Php Truncate Function</div>
<br>
<?php
function truncate_float($number, $places) {
$power = pow(10, $places);
if($number > 0){
return floor($number * $power) / $power;
} else {
return ceil($number * $power) / $power;
}
}
// demo
$lat = 52.4884;
$lng = -1.88651;
$lat_tr = truncate_float($lat, 3);
$lng_tr = truncate_float($lng, 3);
echo 'lat = ' . $lat . '<br>';
echo 'lat truncated = ' . $lat_tr . '<br>';
echo 'lat = ' . $lng . '<br>';
echo 'lat truncated = ' . $lng_tr . '<br><br>';
// demo of floor() on negatives
echo 'floor (1.5) = ' . floor(1.5) . '<br>';
echo 'floor (-1.5) = ' . floor(-1.5) . '<br>';
?>
我使用了 Kartikey 提到的 round() 函数。您可以在 PHP.Net
找到更多信息float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
鱼