목차
PHP中浮点数计算比较及取整不准确的解决方法,取整不准确
백엔드 개발 PHP 튜토리얼 PHP中浮点数计算比较及取整不准确的解决方法,取整不准确_PHP教程

PHP中浮点数计算比较及取整不准确的解决方法,取整不准确_PHP教程

Jul 13, 2016 am 10:10 AM
둥근 부동 소수점 수 과학적 표기법

PHP中浮点数计算比较及取整不准确的解决方法,取整不准确

浮点数计算结果比较
一则浮点数计算例子如下:

复制代码 代码如下:

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

打印出的结果是:bool(false)。也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等,这显然是有违我们的常识的。

对此问题,PHP官方手册曾又说明:显然简单的十进制分数如 0.2 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 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

显然在这里,实际上作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。需要说明的是,这不是PHP的问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。

所以要比较两个浮点数,需要将其控制在我们需要的精度范围内再行比较,因此使用 bcadd() 函数来对浮点数想加并进行精度转换(为字符串):

复制代码 代码如下:

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() 函数是按照指定的精度进行四舍五入,但保留小数点后一位,对我们的取整结果是没影响的。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/940487.htmlTechArticlePHP中浮点数计算比较及取整不准确的解决方法,取整不准确 浮点数计算结果比较 一则浮点数计算例子如下: 复制代码 代码如下: $a = 0.2+...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP에서 문자열을 10진수로 변환하는 방법 PHP에서 문자열을 10진수로 변환하는 방법 Mar 22, 2023 pm 03:22 PM

PHP는 웹 개발 분야에서 널리 사용되는 강력한 프로그래밍 언어입니다. 매우 일반적인 상황 중 하나는 문자열을 10진수로 변환해야 하는 경우입니다. 이는 데이터 처리를 할 때 매우 유용합니다. 이번 글에서는 PHP에서 문자열을 10진수로 변환하는 방법을 설명하겠습니다.

PHP 부동 소수점 수 반올림 방법 PHP 부동 소수점 수 반올림 방법 Mar 21, 2024 am 09:21 AM

이 글은 PHP 부동 소수점 숫자 반올림 방법에 대해 자세히 설명할 것입니다. 편집자는 이것이 매우 실용적이라고 생각하므로 이 글을 읽고 뭔가를 얻을 수 있기를 바랍니다. PHP 부동 소수점 반올림 개요 부동 소수점 숫자는 컴퓨터에서 소수점 뒤에 지수가 오는 형식으로 표시되지만 제한된 자릿수의 근사값으로 저장되는 경우가 많습니다. 부동 소수점 숫자를 특정 정밀도로 반올림해야 하는 경우 여러 가지 방법으로 이를 수행할 수 있습니다. 방법 1. round() 함수 round() 함수는 부동 소수점 숫자를 가장 가까운 정수로 반올림합니다. 부동 소수점 숫자와 선택적 정밀도 매개변수를 허용합니다. 예: $num=1.55;echoround($num);//출력: 2echoround($num,1)

Jul 25, 2023 am 11:45 AM

strconv.FormatFloat 함수를 사용하여 부동 소수점 숫자를 문자열로 변환합니다. Go 언어에서는 출력이나 저장 요구에 따라 부동 소수점 숫자를 문자열 유형으로 변환해야 하는 경우가 많습니다. strconv 패키지는 Go 언어로 제공되며, 여기에 포함된 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

:1. BCMath 소개 BCMath는 PHP에 내장된 확장 라이브러리로, 특히 큰 정수 및 부동 소수점 연산을 처리하는 데 사용됩니다. 덧셈, 뺄셈, 곱셈, 나눗셈, 제곱, 제곱근 등 다양한 수학 연산을 수행할 수 있는 풍부한 기능을 제공하며 다진수에서의 디지털 표현을 지원합니다. 2. BCMath의 장점 PHP에서 기본적으로 제공하는 산술 연산자 및 함수와 비교할 때 BCMath는 주로 다음과 같은 장점을 가지고 있습니다. 더 높은 정밀도: BCMath의 연산 결과는 더 많은 유효 자릿수를 유지할 수 있으며 이는 큰 숫자와 관련된 계산에 특히 중요합니다. 더 넓은 범위: BCMath는 PHP의 기본 데이터 유형보다 더 큰 숫자를 처리할 수 있으므로 오버플로나 정밀도 손실 문제를 방지할 수 있습니다. 더욱 풍부한 기능: BCMath는 다음을 제공합니다.

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

PHP에서 문자열을 부동 소수점으로 변환하는 방법 PHP에서 문자열을 부동 소수점으로 변환하는 방법 Mar 27, 2024 pm 12:48 PM

문자열을 부동 소수점 숫자로 변환하는 것은 PHP에서 일반적인 작업이며 내장된 메서드를 통해 수행할 수 있습니다. 먼저 문자열이 부동 소수점 숫자로 성공적으로 변환되기 전에 올바른 부동 소수점 형식인지 확인하십시오. 다음은 PHP에서 문자열을 부동 소수점 숫자로 변환하는 방법을 자세히 소개하고 구체적인 코드 예제를 제공합니다. 1. (부동) 캐스트 사용 PHP에서 문자열을 부동 소수점 숫자로 변환하는 가장 간단한 방법은 캐스트를 사용하는 것입니다. 강제 변환하는 방법은 문자열 앞에 (float)을 추가하는 것이며, PHP가 자동으로 변환합니다.

See all articles