5

次の計算を実行するアルゴリズムがあります。

  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

また、小数点以下 2 桁を切り上げて0.77として入力しないようにします。

4b. ( ( 0.77 * 30 ) + 8 ) / 40 = 0.77

****以下は失敗したようで、代わりに 0.77 への切り上げを強制します:****

PHP の sptrinf() 関数: PHP は小数点以下を切り上げずに削除します

PHP number_format() 関数: PHP: 数値を小数点以下 2 桁まで表示する

PHP floor() 関数: PHP で浮動小数点数を切り捨てる

  • 別の方法はありますか?
  • PHPで私が望むもの(小数点以下2桁まで切り捨て)を達成することはまったく可能ですか?

手伝ってください。どうもありがとう。

更新 - 解決済み OK、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>';
}
4

5 に答える 5

5

ここで与えられたすべての答えは数字を四捨五入します。この機能は私にとってはうまくいきました。

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

$numberは切り捨てる数値$decimalsで、 は必要な小数点以下の桁数です。 例: truncate(-38.59540719940386 , 6); -38.595407 を返します

必要に応じて、substrのドキュメントを確認してください!

于 2013-10-01T19:20:21.893 に答える
4

次のように、 PHP のfloor関数をいくつかの 10 進シフトと共に使用できます。

floor(0.7666666667 * 100) / 100;
于 2012-05-17T20:49:43.180 に答える
2

round()はどうですか

  <?php
  echo round(3.4);         // 3
  echo round(3.5);         // 4
  echo round(3.6);         // 4
  echo round(3.6, 0);      // 4
  echo round(1.95583, 2);  // 1.96
  echo round(1241757, -3); // 1242000
  echo round(5.045, 2);    // 5.05
  echo round(5.055, 2);    // 5.06
  ?>
于 2012-05-17T21:52:11.920 に答える
0

I used would use the round() function as mentioned by Kartikey. You can find more information here at PHP.Net

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )

Fissh

于 2015-02-13T03:44:33.800 に答える