検索
ホームページphp教程php手册PHP_php の基本における不正確な浮動小数点計算、比較、丸めの解決策

浮動小数点計算結果の比較
浮動小数点計算の例は次のとおりです。

コードをコピー コードは次のとおりです。

$a = 0.2 0.7;
$b = 0.9;
var_dump($a == $b);

出力される結果は次のとおりです: bool(false)。つまり、ここでの 0.2 0.7 という計算結果は 0.9 と等しくなく、明らかに常識に反しています。

この問題に関して、公式 PHP マニュアルには次のように書かれていました: 明らかに、0.2 のような単純な小数は、多少の精度を失わずに内部バイナリ形式に変換することはできません。これは、有限の桁数で特定の小数を正確に表現することが不可能であるという事実と関係しています。たとえば、10 進数の 1/3 は 0.3333333… となります。

上記の変数を倍精度形式で出力します:

コードをコピー コードは次のとおりです。

$a = 0.2 0.7;
$b = 0.9;
printf("%0.20f", $a);
echo '
';
printf("%0.20f", $b);

出力結果は次のとおりです。

コードをコピー コードは次のとおりです。

0.89999999999999991118
0.90000000000000002220

明らかに、ここでは浮動小数点データとして精度の一部が失われており、完全に正確であることはできません。したがって、浮動小数点数の結果が最後の桁まで正確であると決して信じないでください。また、2 つの浮動小数点数が等しいかどうかを比較しないでください。これは PHP の問題ではなく、コンピュータの内部浮動小数点数処理の問題であることに注意してください。 C や JAVA などの言語でも同じ問題が発生します。

したがって、2 つの浮動小数点数を比較するには、比較する前に必要な精度の範囲内で浮動小数点数を制御する必要があるため、bcadd() 関数を使用して浮動小数点数を加算し、精度を (文字列に) 変換します。 p>

コードをコピー コードは次のとおりです。

var_dump(bcadd(0.2,0.7,1) == 0.9); // 出力: bool(true)

浮動小数点数の丸め

記事「PHP 丸め関数 ceil および Floor」には、次の例があります。

コードをコピー コードは次のとおりです。

echo ceil(2.1/0.7); // 出力: 4
?>

浮動小数点数の計算に関する上記の説明を経て、これは不正確な浮動小数点数の計算結果が原因であることがわかりました。

コードをコピー コードは次のとおりです。

printf("%0.20f", (2.1/0.7)); // 出力: 3.00000000000000044409
?>

浮動小数点数の計算に関する上記の説明の後、これは不正確な浮動小数点数の計算結果が原因であることがわかりました。そのため、round() 関数を使用してそれに対処できます。

コードをコピー コードは次のとおりです。

echo ceil(round((2.1/0.7),1) );
?>

round() 関数は指定された精度に従って丸めますが、小数点以下 1 桁を保持しても丸め結果には影響しません。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
php怎么将字符串转换成小数php怎么将字符串转换成小数Mar 22, 2023 pm 03:22 PM

PHP 是一门功能强大的编程语言,广泛应用于 Web 开发领域。其中一个非常常见的情况是需要将字符串转换为小数。这在进行数据处理的时候非常有用。在本文中,我们将介绍如何在 PHP 中将字符串转换为小数。

PHP浮点数四舍五入法PHP浮点数四舍五入法Mar 21, 2024 am 09:21 AM

这篇文章将为大家详细讲解有关PHP浮点数四舍五入法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP浮点数四舍五入法概述浮点数在计算机中表示为小数点后跟指数,然而,它们通常以有限位数的近似值存储。当需要将浮点数四舍五入到特定精度时,有几种方法可以实现。方法1.round()函数round()函数将浮点数四舍五入为最接近的整数。它接受浮点数和可选的精度参数。例如:$num=1.55;echoround($num);//输出:2echoround($num,1)

使用strconv.FormatFloat函数将浮点数转换为字符串使用strconv.FormatFloat函数将浮点数转换为字符串Jul 25, 2023 am 11:45 AM

使用strconv.FormatFloat函数将浮点数转换为字符串在Go语言中,我们经常需要将浮点数转换为字符串类型,用于输出或者存储等需求。Go语言中提供了strconv包,其中的FormatFloat函数可以将浮点数转换为字符串类型。FormatFloat函数有三个参数:f表示要转换的浮点数,fmt表示格式,以及prec表示要保留的小数位数。其中,f参数

PHP浮点数计算误差原因及避免策略PHP浮点数计算误差原因及避免策略Feb 27, 2024 pm 06:33 PM

PHP作为一种流行的服务器端脚本语言,在进行浮点数计算时常常会遇到精度丢失或计算误差的问题,这些问题可能会对程序的准确性和稳定性造成影响。本文将探讨PHP浮点数计算误差的原因,并提出一些避免策略,同时给出具体的代码示例供参考。1.PHP浮点数计算误差的原因在计算机中,浮点数是以二进制形式表示的,而二进制并不能精确地表示所有的十进制小数,这就导致了浮点数的精

php怎么相除取整php怎么相除取整Mar 21, 2023 pm 02:52 PM

随着计算机编程的发展,我们在日常编程工作中可能会遇到需要进行除法运算并取整的场景。而在PHP编程中,我们可以使用不同的方法来实现这个目的。

深入浅出解析PHP BCMath:释放数字运算的潜力深入浅出解析PHP BCMath:释放数字运算的潜力Feb 23, 2024 am 09:10 AM

:一、BCMath简介BCMath是PHP内置的一个扩展库,专门用于处理大型整数和浮点数运算。它提供了丰富的函数来进行加、减、乘、除、平方、开方等各种数学运算,并且支持多种进制的数字表示。二、BCMath的优势BCMath相较于php原生提供的算术运算符和函数,主要有以下几个方面的优势:精度更高:BCMath的运算结果可以保留更多的有效数字,这对于涉及大数计算的场景尤为重要。范围更广:BCMath可以处理比PHP原生数据类型更大的数字,从而避免溢出或精度丢失的问题。功能更丰富:BCMath提供了

如何在PHP中将字符串转换为浮点数如何在PHP中将字符串转换为浮点数Mar 27, 2024 pm 12:48 PM

将字符串转换为浮点数是在PHP中常见的操作,可以通过内置的方法来实现。首先要确保字符串是合法的浮点数格式,才能成功地转换为浮点数。下面将详细介绍如何在PHP中将字符串转换为浮点数,并提供具体的代码示例。一、使用(float)强制转换在PHP中,将字符串转换为浮点数最简单的方式就是使用强制转换。强制转换的方式是在字符串前加上(float)即可,PHP会自动将其

使用C#中的Math.Round函数对浮点数进行四舍五入使用C#中的Math.Round函数对浮点数进行四舍五入Nov 18, 2023 pm 02:17 PM

使用C#中的Math.Round函数对浮点数进行四舍五入,需要具体代码示例在C#编程语言中,有时候我们需要对浮点数进行四舍五入操作。这时,我们可以使用Math.Round函数来实现此功能。Math.Round函数是C#中一个用于数学计算的内置函数,其主要功能是对指定的浮点数进行四舍五入。下面是Math.Round函数的常用格式:Math.Round(doub

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

mPDF

mPDF

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

メモ帳++7.3.1

メモ帳++7.3.1

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。