PHP浮動小数点計算問題

巴扎黑
リリース: 2016-11-22 11:06:58
オリジナル
1597 人が閲覧しました

PHP の +-*/ を使用して浮動小数点数を計算すると、たとえば、echo intval(0.58*100); では 58 ではなく 57 が出力されるなど、問題が発生する可能性があります。浮動小数点数を正確に表現する際のバグ

は、Python を使用しているときにもこの問題に遭遇しました。したがって、基本的にほとんどの言語は、正確な計算のためにクラス ライブラリまたは関数ライブラリを提供します。たとえば、PHP には、よく使用される BC 高精度関数がいくつかあります。

php BC 高精度関数ライブラリには、加算、比較、除算、減算、剰余、乗算、n 乗、デフォルトの小数点数の設定、および 2 乗が含まれています。これらの関数は、電子商取引の価格計算などの金銭計算の場合にさらに役立ちます。

/**

* 2 つの高精度数値を比較します

*

* @access global

* @param float $left

* @param float $right

* @param int $scale 正確な小数点以下の桁数

*

* @return int $left==$right は 0 を返します | $left<$right は -1 を返します

*/

var_dump(bccomp($left=4.45, $right=5.54, 2));

// -1

/**

* 2 つの高精度数値を追加します

*

* @access global

* @param float $left

* @param float $right

* @param int $scale 正確にするための小数点以下の桁数

*

* @return 文字列

*/

var_dump(bcadd($left=1.0321456, $right=0.0243456, 2));

//1.04

/**

* 2 つの高精度数値を減算します

*

* @access global

* @param float $left

* @param float $right

* @param int $scale 正確な小数点以下の桁数

*

* @return 文字列

*/

var_dump(bcsub($left=1.0321456, $right=3.0123456, 2));

//-1.98

/**

* 2 つの高精度数値を除算します

*

* @access global

* @param float $left

* @param float $right

* @param int $scale 正確な小数点以下の桁数

*

* @return 文字列

*/

var_dump(bcdiv($left=6, $right=5, 2));

/ /1.20

/**

* 2 つの高精度数値の乗算

*

* @access global

* @param float $left

* @param float $right

* @param int $scale 正確な小数点以下の桁数

*

* @return 文字列

*/

var_dump(bcmul($left=3.1415926, $right=2.4569874566, 2));

//7.71

/**

* bc関数の小数点以下の桁数を設定します

*

* @access global

* @param int $scale 正確な小数点以下の桁数

*

* @return void

* /

bcscale(3);

var_dump(bcdiv('105', '6.55957'));

// 16.007

注: 設定された桁数については、四捨五入ではなく超過分が破棄されます


関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート