使用PHP来舍入不像1.05的浮点数

时间:2012-06-08 16:29:24

标签: php

是否可以围绕一个数字,如果是.5,只要离开它,低于.5向下的任何数字,任何高于.5的任何数据?

例如:

  • 5.0 * 1.35 = 6.75 // leave it
  • 5.2 * 1.35 = 7.02 // round down to 7.00
  • 5.5 * 1.35 = 7.56 // round up to 8.00

我使用round($n,0, PHP_ROUND_HALF_UP)进行了格式化,其中$ n是上面计算的产品,离开6.75但下一个返回7.02。我也尝试了round($n,-1, PHP_ROUND_HALF_UP),它给了我第二次计算的7.00,但当然第一次不会返回6.75,而是返回680.

这是一个票证标记计算,用户输入第一个数字并乘以第二个数字。我实际上删除了小数,因为他们不想看到它,他们想要对结果进行这种自定义舍入。

3 个答案:

答案 0 :(得分:1)

确定PHP中给定浮点数的最后一个非零数字的值的唯一方法是将其转换为字符串。

$str = (string) $float;
$result = ($str[strlen($str) - 1] == 5) ? $float : round($float);

Example

当然,无论你做什么,由于floating point precision问题,它都会受到很小的误差。

答案 1 :(得分:1)

function myround($num, $prec) {
  $rhu = round($num, $prec, PHP_ROUND_HALF_UP);
  $rhd = round($num, $prec, PHP_ROUND_HALF_DOWN);

  return ($rhu + $rhd) / 2;
}

适用于您喜欢的任何精度。对于hundreth的位置,如示例中所示,$prec需要为2。

答案 2 :(得分:0)

$n = round($n, 2);
if($n % .05 != 0 || $n % .1 == 0)
{
  $n = round($n);
}

这对你有用吗?我假设你所说的5是第100位,如果它不是5那么你想要一个整数。