mirror of
https://github.com/dg/dibi.git
synced 2025-08-03 12:47:33 +02:00
Result::normalize() Fixed normalization of "-." numbers
This commit is contained in:
committed by
David Grudl
parent
c04d2197e3
commit
2c7b35c29d
@@ -466,7 +466,13 @@ class Result implements IDataSource
|
|||||||
: $tmp;
|
: $tmp;
|
||||||
|
|
||||||
} elseif ($type === Type::Float) {
|
} elseif ($type === Type::Float) {
|
||||||
$value = ltrim((string) $value, '0');
|
if (!is_string($value)) {
|
||||||
|
$row[$key] = (float) $value;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$negative = ($value[0] ?? null) === '-';
|
||||||
|
$value = ltrim($value, '0-');
|
||||||
$p = strpos($value, '.');
|
$p = strpos($value, '.');
|
||||||
$e = strpos($value, 'e');
|
$e = strpos($value, 'e');
|
||||||
if ($p !== false && $e === false) {
|
if ($p !== false && $e === false) {
|
||||||
@@ -479,6 +485,10 @@ class Result implements IDataSource
|
|||||||
$value = '0' . $value;
|
$value = '0' . $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($negative) {
|
||||||
|
$value = '-' . $value;
|
||||||
|
}
|
||||||
|
|
||||||
$row[$key] = $value === str_replace(',', '.', (string) ($float = (float) $value))
|
$row[$key] = $value === str_replace(',', '.', (string) ($float = (float) $value))
|
||||||
? $float
|
? $float
|
||||||
: $value;
|
: $value;
|
||||||
|
@@ -117,6 +117,37 @@ test('', function () {
|
|||||||
Assert::same(['col' => '1.1e+10'], $result->test(['col' => '001.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']));
|
Assert::notSame(['col' => '1.1e+1'], $result->test(['col' => '1.1e+10']));
|
||||||
|
|
||||||
|
// negative
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-']));
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-0']));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => '-1']));
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-.0']));
|
||||||
|
Assert::same(['col' => -0.1], $result->test(['col' => '-.1']));
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-0.0']));
|
||||||
|
Assert::same(['col' => -0.1], $result->test(['col' => '-0.1']));
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-0.000']));
|
||||||
|
Assert::same(['col' => -0.1], $result->test(['col' => '-0.100']));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => '-1.0']));
|
||||||
|
Assert::same(['col' => -1.1], $result->test(['col' => '-1.1']));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => '-1.000']));
|
||||||
|
Assert::same(['col' => -1.1], $result->test(['col' => '-1.100']));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => '-001.000']));
|
||||||
|
Assert::same(['col' => -1.1], $result->test(['col' => '-001.100']));
|
||||||
|
Assert::same(['col' => -10.0], $result->test(['col' => '-10']));
|
||||||
|
Assert::same(['col' => -11.0], $result->test(['col' => '-11']));
|
||||||
|
Assert::same(['col' => -10.0], $result->test(['col' => '-0010']));
|
||||||
|
Assert::same(['col' => -11.0], $result->test(['col' => '-0011']));
|
||||||
|
Assert::same(['col' => '-0.00000000000000000001'], $result->test(['col' => '-0.00000000000000000001']));
|
||||||
|
Assert::same(['col' => '-12345678901234567890'], $result->test(['col' => '-12345678901234567890']));
|
||||||
|
Assert::same(['col' => '-12345678901234567890'], $result->test(['col' => '-012345678901234567890']));
|
||||||
|
Assert::same(['col' => '-12345678901234567890'], $result->test(['col' => '-12345678901234567890.000']));
|
||||||
|
Assert::same(['col' => '-12345678901234567890.1'], $result->test(['col' => '-012345678901234567890.100']));
|
||||||
|
|
||||||
|
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');
|
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' => '']));
|
||||||
Assert::same(['col' => 0.0], $result->test(['col' => '0']));
|
Assert::same(['col' => 0.0], $result->test(['col' => '0']));
|
||||||
@@ -147,6 +178,38 @@ test('', function () {
|
|||||||
Assert::same(['col' => 0.0], $result->test(['col' => 0.0]));
|
Assert::same(['col' => 0.0], $result->test(['col' => 0.0]));
|
||||||
Assert::same(['col' => 1.0], $result->test(['col' => 1]));
|
Assert::same(['col' => 1.0], $result->test(['col' => 1]));
|
||||||
Assert::same(['col' => 1.0], $result->test(['col' => 1.0]));
|
Assert::same(['col' => 1.0], $result->test(['col' => 1.0]));
|
||||||
|
|
||||||
|
// Same but negative
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-']));
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-0']));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => '-1']));
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-.0']));
|
||||||
|
Assert::same(['col' => -0.1], $result->test(['col' => '-.1']));
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-0.0']));
|
||||||
|
Assert::same(['col' => -0.1], $result->test(['col' => '-0.1']));
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => '-0.000']));
|
||||||
|
Assert::same(['col' => -0.1], $result->test(['col' => '-0.100']));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => '-1.0']));
|
||||||
|
Assert::same(['col' => -1.1], $result->test(['col' => '-1.1']));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => '-1.000']));
|
||||||
|
Assert::same(['col' => -1.1], $result->test(['col' => '-1.100']));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => '-001.000']));
|
||||||
|
Assert::same(['col' => -1.1], $result->test(['col' => '-001.100']));
|
||||||
|
Assert::same(['col' => -10.0], $result->test(['col' => '-10']));
|
||||||
|
Assert::same(['col' => -11.0], $result->test(['col' => '-11']));
|
||||||
|
Assert::same(['col' => -10.0], $result->test(['col' => '-0010']));
|
||||||
|
Assert::same(['col' => -11.0], $result->test(['col' => '-0011']));
|
||||||
|
Assert::same(['col' => '-0.00000000000000000001'], $result->test(['col' => '-0.00000000000000000001']));
|
||||||
|
Assert::same(['col' => '-12345678901234567890'], $result->test(['col' => '-12345678901234567890']));
|
||||||
|
Assert::same(['col' => '-12345678901234567890'], $result->test(['col' => '-012345678901234567890']));
|
||||||
|
Assert::same(['col' => '-12345678901234567890'], $result->test(['col' => '-12345678901234567890.000']));
|
||||||
|
Assert::same(['col' => '-12345678901234567890.1'], $result->test(['col' => '-012345678901234567890.100']));
|
||||||
|
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => -0]));
|
||||||
|
Assert::same(['col' => -0.0], $result->test(['col' => -0.0]));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => -1]));
|
||||||
|
Assert::same(['col' => -1.0], $result->test(['col' => -1.0]));
|
||||||
|
|
||||||
setlocale(LC_NUMERIC, 'C');
|
setlocale(LC_NUMERIC, 'C');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user