通常の状況では、PHP の浮動小数点配列の合計は非常に簡単で、array_sum() 関数を使用するだけです。ただし、特殊なケースでは、浮動小数点配列の合計エラーが発生する場合があり、この状況は通常、浮動小数点の精度の問題によって発生します。では、浮動小数点配列の合計エラーを解決するにはどうすればよいでしょうか?
まず、浮動小数点数の精度の問題を見てみましょう。コンピュータでは、浮動小数点数は 2 進数形式で保存されますが、限られた 2 進数では表現できない小数点がいくつかあります (たとえば、0.1 などの小数点は 2 進数では正確に表現できません)。したがって、コンピューターはこれらの小数を保存するときに正確に表現できない小数を近似するため、浮動小数点数の精度の問題が発生します。
多数の浮動小数点数を配列に格納し、array_sum() 関数を使用してそれらを合計すると、小数点以下 1 桁多いか少ない精度エラーが発生する可能性があります。 。これは、array_sum() 関数が計算時に浮動小数点数の精度を考慮せず、直接加算演算を実行するためです。
それでは、この問題をどうやって解決すればいいのでしょうか?
解決策の 1 つは、sprintf() 関数を使用して浮動小数点数をフォーマットし、同じ桁数の文字列に変換してから、合計演算を実行することです。サンプル コードは次のとおりです。
$arr = [0.1, 0.2, 0.3]; $sum = 0; foreach ($arr as $value) { $sum += sprintf("%.2f", $value); } echo $sum; // 0.60
コードでは、 sprintf() 関数を使用して各浮動小数点数を小数点以下 2 桁の文字列に変換し、合計演算を実行するため、精度エラーが発生します。問題は回避できる。
さらに、別の解決策は、より高精度の数学的計算を提供できる BC 数学ライブラリを使用することです。サンプル コードは次のとおりです:
$arr = [0.1, 0.2, 0.3]; $sum = 0; foreach ($arr as $value) { $sum = bcadd($sum, $value, 2); } echo $sum; // 0.60
コードでは、bcadd() 関数を使用して浮動小数点数の合計演算を実行します。bcadd() 関数は数学演算の精度を保証します。パラメータ 2 は、小数点以下 2 桁を保持することを意味します。
要約すると、PHP 浮動小数点配列の合計時にエラーが発生した場合、sprintf() 関数または BC 数学ライブラリを使用して問題を解決できます。実際の開発では、計算の精度と精度を確保するために、特定の状況に応じて適切なソリューションを選択する必要があります。
以上がPHP浮動小数点配列合計エラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック









