問題タブ [bcmath]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - bcmath を使用して多くの値を適切に追加するにはどうすればよいですか?
BCMath でいくつかの値を追加したい場合は、次のようにできます。
しかし、それは非常に読みにくく、間違いを犯しやすいでしょう. これを解決する別の方法があることを教えてください...!?
php - 文字列として格納された Phpunit および浮動小数点数
現在、プロジェクトで BC Math 拡張機能を使用しています。
私の単体テストでは、以下のような比較がいくつかあります。
これは合格します:
これは合格しません:
is_numeric が true を返す場合、2 つの文字列が数値として扱われることを示唆しているように見えるいくつかのビットを読みました。phpunit には、2 つの数値文字列を文字列として比較する機能が既にありますか。カスタム アサーションを記述できることはわかっていますが、機能が既に存在する場合は記述したくありませんか?
私はかなり一生懸命見ましたが、機能を見ることができないようですが、存在しなければならないと感じています...
php - 10 進数型を使用する MySQL で、数学関数を使用するとまだ不正確な出力が得られる
すべての正しい bcmath 関数を使用して PHP スクリプトを用意し、浮動小数点数の問題を完全に理解してください。私は小数列も使用しています。なぜなら、それらは別のタイプとして保存され、数学はそれらの方が優れているという印象を受けていたからです。
だから私はクエリを持っています: INSERT INTO mytable (identifier, amount) VALUES ('identifer', 'some_number') ON DUPLICATE KEY UPDATE amount = amount + some_number;
基本的に - 行がない場合は挿入し、ある場合は some_number を追加します。
some_number 列は decimal(24,8) です
some_number を 72100312.72872099 に設定してこれを実行し、現在の行が 0.00000000 でゼロになると、列が 72100312.72872100 になる計算になります。
some_number が 72100312.72872098 の場合、正常に動作します。72100312.72872101 であれば問題ありません。11111111.72872099 とすれば問題ありません。
現在の行がゼロではなく、代わりに .00000005 である場合、72100312.72872099 が追加され、合計は予想どおり 72100312.72872104 になります。
数学を台無しにしているようなものです。そして、小数列はこれに影響されないと思いました。
これを修正する方法、またはより良い方法で更新を行う方法はありますか? select、bcadd、そして update を行う必要はありません。このタイプの行 (重複更新時に挿入) は、コード内に約 120 回出現します。それは、選択/bcadd/更新するための多くの改造です。
補遺:5.0より前のMySQLサーバーを数学用の浮動小数点数に変換して読んでください。私は5.5です。5.0未満の問題ではありません。
Edit2: クライアントのバージョンは mysqlnd 5.0.11 です - それが問題の一部であるかどうかわかりませんか? ただし、サーバーは計算を行う必要がありますよね?
php - translate a few >32-bit operations to work in a php 32-bit environment
My webhost reports that PHP_INT_MAX is 2147483647, i.e. it's a 32-bit environment. I'm trying to convert a couple of mathematical operations that currently works in a 64-bit environment, so that they also work in the 32-bit environment.
The above yields de46c6d30bfa6e097fca82f63c2f4f4c
in the 32-bit environment, but it should actually yield cd97cc68c1038b485b081ba2aa3ea6fa
(which it currently does in the 64-bit environment). I'm guessing that the bitshift operator is causing the mismatch, but I'm not sure (I'm not a php-expert, nor a mathematician, and I'm not the author of the original code :)
BCMath is installed in the 32-bit environment, and there may be other frameworks installed as well (I can check the phpinfo if needed).
How would I go about fixing this? Is it possible?
// Linus
Edit: Yes, I know the code looks weird, but it is working exactly as intended in a 64-bit environment.
php - bcmath 関数を正しく使用する
私はこれまでbcmath
数値を使用したことがなく、比較と操作について少し読んでいfloating point numbers
たので、bcmath
関数にたどり着きました。
数値が同じように見えても、内部に同じように格納されていない可能性があるため、浮動小数点数を比較するときに関数のようなものを使用する必要があることを理解しています。しかし、他の bc 関数を使用する必要は本当にあるのでしょうか?bccomp
2 つの浮動小数点数を加算したり、他の計算を行ったりすると、どのような害があるでしょうか? 浮動小数点数は正しくないので (精度が高い場合は最後の桁を除いて)、好きなように操作できますか?
php - CentOS 6.5 - PHP 5.6.7 および bcmath
CentOS 6.5 に php-bcmath をインストールしようとしていますが、現在の PHP バージョンは 5.6.7 です。これをインストールしようとしている理由は、使用しているフォーラム用のプラグインがあり、サーバーが最新の PHP バージョンを使用しているため、エラーがスローされるためです。スローされているエラーは以下のとおりです。
258 行目の Flags/Listener/Includes/Reader/Decoder.php、リファラー: http://IP Address/admin.php
[Tue Apr 07 03:42:15 2015] [error] [client IP Address] PHP Fatal error: Call to undefined function Countryflags\Db\Reader\bcadd() in /var/www/html/library/Snog/CountryFlags/ 258 行目の Listener/Includes/Reader/Decoder.php、リファラー: http://IP Address/admin.php
[Tue Apr 07 03:45:50 2015] [error] [client IP Address] PHP Fatal error: Call to undefined function Countryflags\Db\Reader\bcadd() in /var/www/html/library/Snog/CountryFlags/ 258 行目の Listener/Includes/Reader/Decoder.php
[Tue Apr 07 03:45:56 2015] [error] [client IP Address] PHP Fatal error: Call to undefined function Countryflags\Db\Reader\bcadd() in /var/www/html/library/Snog/CountryFlags/ 258 行目の Listener/Includes/Reader/Decoder.php
したがって、yum install を使用してサーバーに php-bcmath をインストールしようとすると、次のようになります。
[root@forums のログ]# yum install php-bcmath 読み込まれたプラグイン:
fastestmirror、replace キャッシュされたホストファイルからのミラー速度の読み込み
* ベース: mirror-centos.hostingswift.com
* エクストラ: mirror.oss.ou.edu
* 更新: mirror.team -cymru.org
* webtatic: us-east.repo.webtatic.com インストール プロセスのセットアップ 依存関係の解決
--> トランザクション チェックの実行
---> パッケージ php-bcmath.x86_64 0:5.3.3-40.el6_6 がインストールされます
--> 処理中の依存関係: php-common(x86-64) = 5.3.3-40.el6_6 for package: php-bcmath-5.3.3-40.el6_6.x86_64
--> トランザクション チェックの実行
---> パッケージ php -common.x86_64 0:5.3.3-40.el6_6 がインストールされます
--> 処理の競合: php56w-common-5.6.7-1.w6.x86_64 は php-common 5.5.0 と競合します
--> 完了した依存関係の解決エラー: php56w-common は php-common-5.3.3-40.el6_6 と競合します.x86_64 --skip-broken を使用して問題を回避できます。次のコマンドを実行してみてください: rpm -Va --nofiles
--nodigest [root@forums logs]#
インストールを正しく機能させる方法はありますか?
ありがとう!