precision 0 -INF
未关闭
还没有人认领这个 Issue。
Bug
Category: Engine
Status: Verified
- 主要语言
- C
- 星标
- 40.4k
- 派生
- 8.1k
- 平均合并
- 2 天 13 小时
- 30 天内合并 PR
- 96
描述
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
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先在 PHP 8.1.7 上运行所提供的 PHP 重现代码,并比较将 precision 和 serialize_precision 设置为 0 时 INF 和 -INF 的字符串转换结果。跟踪这些特殊浮点值的处理过程,然后验证输出是否与预期的空错误字符串匹配,同时不要放宽精度行为。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- php
- 领域
- backend
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100