PHP中没有Truncate函数 - 选项?

leo*_*edy 5 php truncate decimal 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删除小数而不进行舍入

PHP number_format()函数:PHP:显示2位小数的数字

PHP floor()函数:用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>';
}
Run Code Online (Sandbox Code Playgroud)

Fer*_*eto 5

这里给出的所有答案都是整数。这个功能对我有用,我也希望对你有用。

function truncate($number, $decimals)
{
  $point_index = strrpos($number, '.'); 
  return substr($number, 0, $point_index + $decimals+ 1);
}
Run Code Online (Sandbox Code Playgroud)

$number要截断的数字在哪里,是$decimals您想要的小数位数。 示例: truncate(-38.59540719940386 , 6);返回 -38.595407

如果需要,请查看substr的文档!