php / php/php-src

precision 0 -INF

Offen
#9,209 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Category: Engine Status: Verified
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description
<?php

ini_set('precision', 0);
ini_set('serialize_precision', 0);
$nif = -INF;
$pif = INF;
$float = -INF;
$string = '';
if(is_float($float)) {
if(INF === INF) {
if($pif === $float) {
$string = 'INF';
} elseif($nif === $float) {
$string = '-INF';
} else {
$string = $float . '';
}
}
}
$error = '';
$string3 = $pif . '';
$arr = preg_split('//', $string3);
$count = count($arr) - 2;
$false = true;
foreach($arr as $key => $value) {
if($key > 0 && $key <= $count) {
$ord = ord($arr[$key]);
if(1 == $key) {
$y = 'I';
$z = 'i';
} elseif(2 == $key) {
$y = 'N';
$z = 'n';
} elseif(3 == $key) {
$y = 'F';
$z = 'f';
}
if(!($ord == ord($y) || $ord == ord($z))) {
$false = false;
break;
}
}
}
if(!($false && $pif === INF)) {
$error = $error . 'INF';
}
$string4 = $nif . '';
$arr2 = preg_split('//', $string4);
$count = count($arr2) - 2;
$false2 = true;
foreach($arr2 as $key2 => $value2) {
if($key2 > 0 && $key2 <= $count) {
$ord = ord($arr[$key2]);
if(1 == $key2) {
$y = '-';
$z = '-';
} elseif(2 == $key2) {
$y = 'I';
$z = 'i';
} elseif(3 == $key2) {
$y = 'N';
$z = 'n';
} elseif(4 == $key2) {
$y = 'F';
$z = 'f';
}
if(!($ord == ord($y) || $ord == ord($z))) {
$false2 = false;
break;
}
}
}

if(!($false2 && $nif === -INF)) {
$error = $error . '-INF';
}
if(!(INF === INF)) {
$error = $error . 'Not === INF';
}

$string2 = $float . '';
var_dump($string, $string2, $error);

?>

Correct:
string(4) "-INF" string(4) "-INF" string(0) ""
Correct without loose precision for special case INF, -INF or NAN.

PHP Version

php 8.1.7

Operating System

Irrelevant

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, die bereitgestellte PHP-Reproduktion unter PHP 8.1.7 auszuführen, und vergleiche die String-Konvertierungen von INF und -INF, wenn precision und serialize_precision auf 0 gesetzt sind. Verfolge die Verarbeitung dieser speziellen Gleitkommawerte und überprüfe anschließend, dass die Ausgabe mit der erwarteten leeren Fehlerzeichenkette übereinstimmt, ohne das Präzisionsverhalten zu lockern.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
php
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.