php - PHP 中没有截断函数 - 选项?

标签 php decimal truncate floor

我有一个执行以下计算的算法:

  1. ( ( 0.50 * 0 ) + 7 )/10 = 0.70
  2. ( ( 0.70 * 10 ) + 9 )/20 = 0.80
  3. ( ( 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/

相关文章:

javascript - chop svg 文本以适应矩形

utf-8 - lua,截断包含utf-8编码字符的字符串

php - 在 Windows 上使用 less 和 symfony2

php - 使我的 PHP 站点免受黑客攻击

php - 在 gridview yii2 中设置宽度图像

.net - 通过 float 或decimal 调用参数为 double 的重载函数

javascript - 在 Node JS 中从 DEC 转换为 HEX 时保留零字符

asp-classic - ASP/VBScript "Gotchas"

html - 截断 html 表内字符串的另一端

php - PHPStorm,Docker和调试