2

私は、基本的な LAMP セットアップがある自宅の開発ボックスで PHP の作業を行っています。ホーム ボックスで自分の Web サイトを見ると、エコーする数値は必要最小限の精度に自動的に切り捨てられます。たとえば、2 は 2 としてエコーされ、2.2000 は 2.2 としてエコーされます。

製品ボックスでは、すべての数値に少なくとも 1 つの不要なゼロがエコーされます。たとえば、100 が 100.0 になります。どちらのボックスでも、PHP バージョンは 5.2.5 です。PHPに不要なゼロを自動的に削除させる設定を変更できるかどうかを誰かが知っていますか? 数値を出力して echo を printf などに置き換えるコード内のすべての場所に移動する必要はありません。

ムチャス・グラシアス。

4

6 に答える 6

5

また、PHP の設定に依存できない場合は、 number_format()を忘れないでください。これを使用して、数値が返される方法を定義できます。例:

// displays 3.14 as 3 and 4.00 as 4    
print number_format($price, 0); 
// display 4 as 4.00 and 1234.56 as 1,234.56 aka money style
print number_format($int, 2, ".", ","); 

PS: Windows やその他のボックスでは動作しないため、money_format() の使用は避けてください。

于 2008-12-10T18:51:39.140 に答える
3

利用可能なINI設定をざっと見てみると、精度の値が異なっていることがわかりますか?

于 2008-12-10T18:46:17.013 に答える
2

すべての回答に感謝します-解決策は、責任のあるメソッドの戻り値をフロートにキャストすることでした。つまりやっていた

return someNumber.' grams';

に変更しただけです

return (float)someNumber.' grams';

その後、PHP は必要に応じて末尾のゼロを切り捨てました。

誰かがこれを閉じることができますか?

于 2008-12-11T11:57:17.337 に答える
0

組み込み関数を試してくださいround

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

指定された精度 (小数点以下の桁数) に丸められた val の値を返します。precision は、負またはゼロ (デフォルト) にすることもできます。

例1 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
?>

例2 モードの例

<?php
echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9

echo round(8.5, 0, PHP_ROUND_HALF_UP);   // 9
echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_ODD);  // 9
?>
于 2011-12-01T09:01:02.960 に答える
0

他の考えられる原因を除外するために: 数字はどこから来ているのですか? リテラル値でこれを行いますか?

精度の設定だけでこの問題が発生する可能性は低いと思われます。auto_prepend_fileまたは などを介して何かが出力に干渉していないかどうかも確認してくださいoutput_handler

于 2008-12-10T18:51:59.497 に答える
0

round() コマンドを使用して、必要な精度を常に切り捨てる必要があります。そうしないと、float 演算の性質により、いつか 2.2000000000123 のような値が得られます。

于 2008-12-10T18:52:43.677 に答える