【发布时间】:2012-05-17 20:46:58
【问题描述】:
我有一个执行以下计算的算法:
- ( ( 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?这没有道理。有没有办法让它仅在小数点超过 2 位时截断?
已解决:
$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>';
}
【问题讨论】:
-
您应该查看@Fernando Prieto his answer below。他使用基于(子)字符串的方法,类似于您选择的解决方案的第一部分,但我个人认为它可能更有效、更健壮。
标签: php decimal truncate floor