PHPフロア関数の問題。

Aug 08, 2016 am 09:31 AM
floor Money pow quot

ログイン後にコピー

私は現在、金融に関するプロジェクトを書いています。小数に関する問題がたくさん含まれています。以前、floor を使って小数点第 2 位まで切り捨てたとき、突然、次のコードが異常であることに気づきました。

$money=271.28;
echo $money=floor($money*pow(10,2))/100
ログイン後にコピー
出力が 271.28 ではなく 271.27 だったことに驚きました

その後、多くの情報を確認し、php 公式 Web サイトで次のことを確認しました:

浮動小数点数の精度には限界があります、can 0.10.7 などの有理数は、仮数の数に関係なく、内部で使用されるバイナリでは正確に表現できないため、バイナリ形式に変換すると、ちょっとした精度。これは、混乱を招く結果につながる可能性があります。たとえば、floor((0.1+0.7)*10) は、通常、期待される 8 の代わりに 7 を返します。これは、結果の内部表現が次のとおりであるためです。実際には 7.99999999999999991118... に似ています。 したがって、浮動小数点数の結果が最後の桁まで正確であるとは決して信じないでください。また、2 つの浮動小数点数が等しいかどうかを比較しないでください。

後で上記の操作の結果を印刷しました:

printf("%.12f", $money*pow(10,2));
ログイン後にコピー
は結果が次であることを発見しました: 27127.999999999996

それは精度の問題であることが判明しました。統一された解決策はまだ見つかっていません。 2 桁まで正確なデータの再処理を避けるために、コード ロジックに

if ($money - round ( $money, 2 ) < 0.00001) {

}else{
$money=floor($money*pow(10,2))/100;
}
ログイン後にコピー
を追加することしかできません。

上記の関数を実装する別の方法 (小数点以下 2 桁まで正確で、3 桁目は切り捨てる) を知っている人がいたら、私に知らせてください。

上記は、PHP の Floor 関数の問題を紹介しました。 、関連コンテンツも含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

MySQLのFLOOR関数を使って切り捨てる方法 MySQLのFLOOR関数を使って切り捨てる方法 Jul 25, 2023 pm 12:45 PM

MySQLのFLOOR関数を使って切り捨てる方法 MySQLではFLOOR関数を使って切り捨てます。 FLOOR 関数は、浮動小数点数または小数点を含む数値を最も近い整数に切り捨てる必要がある場合に非常に便利なツールです。この記事では、MySQL の FLOOR 関数の使用方法と実用的なコード例を紹介します。まず、FLOOR 関数の構文を理解しましょう。 FLOOR 関数の構文は次のとおりです。 FLOOR(x) ここで、x は表します。

Java の Math.pow() 関数を使用して数値の累乗を計算します。 Java の Math.pow() 関数を使用して数値の累乗を計算します。 Jul 25, 2023 pm 06:25 PM

Java の Math.pow() 関数を使用して数値の累乗を計算する 数学的演算では、数値の累乗を計算する必要がよくあります。 Java では、Math.pow() 関数を使用して累乗演算を実行できます。この記事では、Math.pow() 関数の使用方法といくつかのコード例を紹介します。 Math.pow() 関数は、Java の数学ライブラリの静的メソッドで、値の累乗を計算し、計算結果を返すために使用されます。その構文は次のとおりです: Math.p

PoSとPoWの違いは何ですか? PoSとPoWの違いは何ですか? Dec 16, 2024 pm 06:50 PM

この記事では、Proof of Stake (PoS) と Proof of Work (PoW) という 2 つの主流のコンセンサス メカニズムについて詳しく説明します。 PoS では、バリデーターがトランザクションを検証する権限を得るためにトークンをプレッジする必要がありますが、エネルギーの節約と優れた拡張性という利点がありますが、富の集中につながる可能性もあります。 PoW では、マイナーはトランザクションを検証するために複雑な数学的問題を解決する必要がありますが、より安全で分散化されていますが、大量のエネルギーを消費し、拡張性が劣ります。この記事では、ブロックチェーン分野における PoS と PoW の原理、利点と欠点、およびアプリケーションを比較し、読者がコンセンサス メカニズムで果たす主要な役割を理解できるようにします。

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 Jun 13, 2016 am 10:15 AM

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没问题。

写真が消える問題を解決する方法 写真が消える問題を解決する方法 Apr 07, 2024 pm 03:02 PM

写真が消える問題を解決する方法 まず、写真ファイル $file=$_FILES['userfile']; if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner() image_src) VALUES ('images/ {$file['name'

图片消失怎么解决 图片消失怎么解决 Jun 13, 2016 am 10:09 AM

图片消失如何解决先是图片文件上传$file=$_FILES['userfile'];  if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 Jun 13, 2016 am 10:24 AM

为什么我在php上写的这个代码,在浏览器上什么都不显示啊

See all articles