php - 四舍五入到最接近的分数(二分之一、四分之一等)

标签 php rounding printf floor ceil

所以,我需要创建以下函数,但如果没有复杂的数学运算,我的头脑无法想到 PHP 中的任何可能性。

  • 始终四舍五入到最接近的小数点(1.81 = 1.90、1.89 = 1.90、1.85 = 1.90)
  • 始终四舍五入到最接近的小数点(1.81 = 1.80、1.89 = 1.80、1.85 = 1.80)
  • 始终四舍五入到最接近的 x.25/x.50/x.75/x.00(1.81 = 2、1.32 = 1.50)
  • 始终向下舍入到最接近的 x.25/x.50/x.75/x.00(1.81 = 1.75,1.32 = 1.25)
  • 始终四舍五入到最接近的 x.50/1(1.23 = 1.50,1.83 = 2)
  • 始终向下舍入到最接近的 x.50/1(1.23 = 1、1.83 = 1.50)

我已经在 Google 上搜索了 2 个小时,唯一出现的是 Excel 论坛。是否可以使用一些简单的 PHP 代码行?

最佳答案

因为您正在寻找 fourths(.00.25.50.75),将您的数字乘以 4,根据需要四舍五入到最接近的整数(floor 如果向下,ceil 如果向上),然后除以 4 .

1.32,直到最近的四分之一:

1.32 * 4 = 5.28
floor(5.28) = 5.00
5.00 / 4 = 1.25

同样的原则适用于任何其他分数,例如三分之二八分之二(.0.125 , .25, .375, .5, .625, .75 , .875)。例如:

1.77,直到最近的八分之一:

1.77 * 8 = 14.16
ceil(14.16) = 15.00
15.00 / 8 = 1.875


为了好玩,你可以写一个这样的函数:

function floorToFraction($number, $denominator = 1)
{
    $x = $number * $denominator;
    $x = floor($x);
    $x = $x / $denominator;
    return $x;
}

echo floorToFraction(1.82);      // 1
echo floorToFraction(1.82, 2);   // 1.5
echo floorToFraction(1.82, 3);   // 1.6666666666667
echo floorToFraction(1.82, 4);   // 1.75
echo floorToFraction(1.82, 9);   // 1.7777777777778
echo floorToFraction(1.82, 25);  // 1.8

关于php - 四舍五入到最接近的分数(二分之一、四分之一等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14903379/

相关文章:

php - PHP/Sqlite3进程同步

rounding - Stata 似乎实际上并未使用 round() 进行舍入

go - fmt.Sprint() 返回不正确的结果

php - header 已在 CakePHP 应用程序中发送错误

php - 不再有 PHP 5.3.x 的 VC6 版本?

php - 如何使用 php/mysql 取消设置 BLOB?

c - 为什么我在编译这段代码时会出错以及如何修复它们?

sql-server - SQL Server - 精确处理

java - Eclipse Java printf 问题 PrintStream 不适用

c - Printf 让程序卡住没有响应