根据PHP

时间:2016-03-31 04:27:55

标签: php rounding

我正在努力将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中,它完成如下:

  
      
  • ceiling((2 * 18)/2.98,0.25)= 12.25      
        
    • ceiling((2 * 18.5)/2.98,0.25)= 12.50
    •   
    • ceiling((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,这些选项无法达到目的。

有人帮我吗?

4 个答案:

答案 0 :(得分:1)

使用此功能:

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

这样称呼:

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

它将舍入到最接近的0.25,它将返回 12.25

答案 1 :(得分:0)

PHP仅提供使用您找到的选项舍入精度的工具。但是,您可以通过一些创造性的数学和用户地位功能来做类似于您想要的事情。

尝试:

function roundTo($value, $roundTo = 1)
{
    $inverse = 1 / $roundTo;
    return round($value * $inverse) / $inverse;
}

请参阅:https://ideone.com/fojMrS

请注意,如果您需要ceilfloor功能,则必须为ceilfloor创建此功能的版本,这仅适用于{{ 1}}。

答案 2 :(得分:0)

$YourNumber = 12.08;
$int = $YourNumber * 4;
$int = ceil($int);

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

答案 3 :(得分:0)

int kartNumber = Integer.parseInt(etGokart.getText().toString());
    .......
    .......
     protected JSONObject doInBackground(String... urls) {
     try {
           String urlText = MessageFormat.format("http://race.speedtiming.com/api/index.php/races/scoreboard.json?track_id={0}", kartNumber);
           URL url = new URL(urlText);
           HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
           urlConnection.setRequestMethod("GET");
    ..........
    ..........

这会将十进制数向上舍入到最接近的0.25,如果它也是0.25的除数,它将返回相同的值。简单。

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