diff --git a/src/Type/Constant/ConstantFloatType.php b/src/Type/Constant/ConstantFloatType.php index 0ac763af76..eb44693d80 100644 --- a/src/Type/Constant/ConstantFloatType.php +++ b/src/Type/Constant/ConstantFloatType.php @@ -11,6 +11,7 @@ use PHPStan\Type\Traits\ConstantNumericComparisonTypeTrait; use PHPStan\Type\Traits\ConstantScalarTypeTrait; use PHPStan\Type\Type; +use PHPStan\Type\UnionType; use PHPStan\Type\VerbosityLevel; use function abs; use function ini_get; @@ -69,6 +70,13 @@ public function describe(VerbosityLevel $level): string public function toString(): Type { + if ($this->value === 0.0) { + return new UnionType([ + new ConstantStringType('0'), + new ConstantStringType('-0'), + ]); + } + return new ConstantStringType((string) $this->value); } diff --git a/tests/PHPStan/Analyser/nsrt/bug-12225.php b/tests/PHPStan/Analyser/nsrt/bug-12225.php new file mode 100644 index 0000000000..83647d0bff --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/bug-12225.php @@ -0,0 +1,44 @@ +