diff --git a/src/Dibi/Result.php b/src/Dibi/Result.php index 35eafffa..1ac46f9d 100644 --- a/src/Dibi/Result.php +++ b/src/Dibi/Result.php @@ -498,8 +498,11 @@ class Result implements IDataSource } elseif ($type === Type::FLOAT) { $value = ltrim((string) $value, '0'); $p = strpos($value, '.'); - if ($p !== false) { + $e = strpos($value, 'e'); + if ($p !== false && $e === false) { $value = rtrim(rtrim($value, '0'), '.'); + } elseif ($p !== false && $e !== false) { + $value = rtrim($value, '.'); } if ($value === '' || $value[0] === '.') { $value = '0' . $value; diff --git a/tests/dibi/Result.normalize.phpt b/tests/dibi/Result.normalize.phpt index 44e75268..a6c7a13e 100644 --- a/tests/dibi/Result.normalize.phpt +++ b/tests/dibi/Result.normalize.phpt @@ -99,6 +99,11 @@ test(function () { Assert::same(['col' => 1.0], $result->test(['col' => 1])); Assert::same(['col' => 1.0], $result->test(['col' => 1.0])); + Assert::same(['col' => '1.1e+10'], $result->test(['col' => '1.1e+10'])); + Assert::same(['col' => '1.1e-10'], $result->test(['col' => '1.1e-10'])); + Assert::same(['col' => '1.1e+10'], $result->test(['col' => '001.1e+10'])); + Assert::notSame(['col' => '1.1e+1'], $result->test(['col' => '1.1e+10'])); + setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu'); Assert::same(['col' => 0.0], $result->test(['col' => ''])); Assert::same(['col' => 0.0], $result->test(['col' => '0']));