我有一个执行以下计算的算法:
- ( ( 0.50 * 0 ) + 7 )/10 = 0.70
- ( ( 0.70 * 10 ) + 9 )/20 = 0.80
- ( ( 0.80 * 20 ) + 7 )/30 = 0.7666666667 -> 我希望这个值截断为 0.76
这样它就可以输入到其余的计算中:
4a。 ( ( 0.76 * 30 ) + 8 )/40 = 0.77
并且不在四舍五入到小数点后两位为0.77时输入:
4b。 ( ( 0.77 * 30 ) + 8 )/40 = 0.77
****以下似乎失败了,而是强制舍入到 0.77:****
PHP sptrinf() 函数:PHP dropping decimals without rounding up
PHP number_format() 函数:PHP: show a number to 2 decimal places
PHP floor() 函数:Truncate float numbers with PHP
- 还有别的办法吗?
- 是否可以使用 PHP 实现我想要的(截断到小数点后两位)?
请协助。非常感谢。
更新 - 已解决 好的,多亏了 dkamins 和 zneak,它现在可以正常工作了。我使用了 floor() 方法(我假设我过去做的事情不对)。 但是,现在发生了以下情况:
例如
(0.86 * 30) + 9 )/40 = 0.87(它应该),但在 TRUNC 之后它 = 0.86
如何将 0.87 截断为 0.86?这没有道理。有没有办法让它仅在小数点后两位以上时才截断?
已解决:
$numDecPlace = strlen(substr(strrchr($newRel, "."), 1));
echo '<p>Test: Number of decimal places=' .$numDecPlace. '</p>';
if($numDecPlace > 2) {
$newRel = floor($newRel * 100) / 100; // Truncate to 2dp.
echo '<p>Test: New relationship truncated is $newRel=' .$newRel. '</p>';
}
最佳答案
这里给出的所有答案都是四舍五入的。 这个功能对我有用,我希望对你也有用。
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 - PHP 中没有截断函数 - 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10643273/