1

次のように、いくつかの収益値を計算してそれらを加算するループがあります。

$SalesGrowth = $C2012Sales+$C2011Sales;

場合によっては、これが機能し、たとえば、761.9 + 759.0 = 1520.9 という期待値が得られます。

他の例では、PHP がランダムに丸めを誤って決定し (??)、単位を変更し (??)、次のようになります。

8,788.0 + 8,794.3 = 16

ここで何が起こっているのですか?スペースで区切られた個別の売上値をエコーアウトしてみましたが、それらは正しく表示されるため、基になる数値は間違っていません。

4

4 に答える 4

9

数値として解釈され、8,788.0ただ8であり、解析はコンマで停止します。

桁区切り記号のようなギミックを許可したい場合は、ロケールを意識した数値解析が必要になります。


更新: Zend Frameworkをお持ちの場合は、次の操作を実行できます。

require_once('Zend/Locale/Format.php');

$locale = new Zend_Locale('en_GB'); // #1

$v = "8,410.5";
$n = Zend_Locale_Format::getNumber($v, array('locale' => $locale,'precision' => 3));

echo 2 * $number;   // prints "16821"

ロケールをハードコーディングする代わりに、環境から取得することができます:new Zend_Locale(setlocale(LC_ALL, ""))

于 2012-01-04T18:56:20.070 に答える
3

コンマの問題をおい....

それらを追加する前に、数字からすべてのコンマを削除してください...

str_replace(",","",$no1);
于 2012-01-04T18:58:22.487 に答える
2

これは非常に簡単です... 演算子を使用するように PHP に要求すると、これらの文字列が数値+などに暗黙的に変換されます。"8,788.0"文字があるため,、数字の有用性が終了し、 として解釈され8ます。等々...

非文字を取り除くと、[0-9.]よりうまく機能します。

于 2012-01-04T18:58:09.260 に答える
2

761.9 は有効な数値ですが、8,788.0 は有効ではないことに注意してください (PHP の観点から)。

したがって8,788.0、数値コンテキストでは、 と同じように 8 として評価され8,794.3ます。そして 8+8 = 16 です。

この問題を解決するには、データを処理して数値を適切にフォーマットします。

于 2012-01-04T18:58:28.987 に答える