根据PHP中的分数四舍五入十进制数

Posted

技术标签:

【中文标题】根据PHP中的分数四舍五入十进制数【英文标题】:Round up decimal number according to fraction in PHP 【发布时间】:2016-03-31 04:27:54 【问题描述】:

我正在努力将 excel 公式转换为 php 函数。现在我面临一个作为分数的问题。请让我解释一下:

(2 * 18)/2.98 = 12.08 但根据我的要求应该是 12.25 (2 * 18.5)/2.98 = 12.416 但根据我的要求应该是 12.50 (2 * 18.8)/2.98 = 12.617 但根据我的要求应该是 12.75

在excel中,它是这样完成的:

上限(( 2 * 18 )/2.98, 0.25) = 12.25 上限(( 2 * 18.5 )/2.98, 0.25) = 12.50 上限(( 2 * 18.8 )/2.98, 0.25) = 12.75

我在 PHP 中尝试过。 Ceil() 和 Floor() 不起作用,因为这 2 个应相应地给出输出 13 和 12。

另一个 round() 使用这些选项 PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, or PHP_ROUND_HALF_ODD 不能达到目的。

有人帮我吗?

【问题讨论】:

这里已经回答了这个问题:***.com/questions/14903379/… @andreas 感谢您的信息。它也有帮助。 @ketan 你编辑了什么? @ahossain 我只是正确地格式化你的问题。 ***.com/posts/36324171/revisions @ahossain 没有一个答案是正确的吗?您应该将正确答案标记为已接受和/或赞成。 【参考方案1】:

使用此功能:

function fractionRound($num,$frac) 
  return ceil($num/$frac)*$frac;

这样称呼它:

echo fractionRound(( 2 * 18 )/2.98, 0.25); 

它会四舍五入到最接近的 0.25 它会返回 12.25

【讨论】:

【参考方案2】:

PHP 仅提供了使用您找到的选项进行四舍五入的功能。但是,您可以使用一些创造性的数学和用户空间函数来完成与您想要的类似的事情。

试试:

function roundTo($value, $roundTo = 1)

    $inverse = 1 / $roundTo;
    return round($value * $inverse) / $inverse;

见:https://ideone.com/fojMrS

请注意,如果您想要 ceilfloor 功能,则必须为 ceilfloor 创建此功能的版本,这仅适用于 round

【讨论】:

【参考方案3】:
$YourNumber = 12.08;
$int = $YourNumber * 4;
$int = ceil($int);

echo $YourNumber ." was the start <br>";
echo $int / 4 ." is the answer";

【讨论】:

【参考方案4】:
function roundQuarters($input)

    $rm = $input % 0.25;
    return $rm == 0 ? $input : $input - $rm + 0.25;

这会将小数四舍五入到最接近的 0.25,如果它也是 0.25 的除数,它将返回相同的值。很简单。

您可以将 0.25 替换为您想要的任何小数,甚至可以将其参数化。

【讨论】:

以上是关于根据PHP中的分数四舍五入十进制数的主要内容,如果未能解决你的问题,请参考以下文章

将十进制数转换为分数 AS3

格式化任何位置的十进制数

LeetCode 405. 数字转换为十六进制数(补码的问题) / 166. 分数到小数(模拟长除法) / 482. 密钥格式化

读《程序是怎样跑起来的》第三章有感

存储过程未按预期保存十进制数

在 Azure 数据工厂映射数据流中截断(非舍入)十进制数