mirror of
https://github.com/dg/dibi.git
synced 2025-08-06 06:07:39 +02:00
Result: fixed normalization of float when ends with "0" [Closes #189]
This commit is contained in:
@@ -494,7 +494,17 @@ class DibiResult extends DibiObject implements IDataSource
|
|||||||
$row[$key] = is_float($tmp = $value * 1) ? $value : $tmp;
|
$row[$key] = is_float($tmp = $value * 1) ? $value : $tmp;
|
||||||
|
|
||||||
} elseif ($type === dibi::FLOAT) {
|
} elseif ($type === dibi::FLOAT) {
|
||||||
$row[$key] = str_replace(',', '.', ltrim((string) ($tmp = (float) $value), '0')) === ltrim(rtrim(rtrim($value, '0'), '.'), '0') ? $tmp : $value;
|
$value = ltrim($value, '0');
|
||||||
|
$p = strpos($value, '.');
|
||||||
|
if ($p !== FALSE) {
|
||||||
|
$value = rtrim(rtrim($value, '0'), '.');
|
||||||
|
}
|
||||||
|
if ($value === '' || $value[0] === '.') {
|
||||||
|
$value = '0' . $value;
|
||||||
|
}
|
||||||
|
$row[$key] = $value === str_replace(',', '.', (string) ($float = (float) $value))
|
||||||
|
? $float
|
||||||
|
: $value;
|
||||||
|
|
||||||
} elseif ($type === dibi::BOOL) {
|
} elseif ($type === dibi::BOOL) {
|
||||||
$row[$key] = ((bool) $value) && $value !== 'f' && $value !== 'F';
|
$row[$key] = ((bool) $value) && $value !== 'f' && $value !== 'F';
|
||||||
|
@@ -56,3 +56,75 @@ test(function () {
|
|||||||
Assert::same(array('col' => 0), $result->test(array('col' => 0)));
|
Assert::same(array('col' => 0), $result->test(array('col' => 0)));
|
||||||
Assert::same(array('col' => 1), $result->test(array('col' => 1)));
|
Assert::same(array('col' => 1), $result->test(array('col' => 1)));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test(function () {
|
||||||
|
$result = new MockResult;
|
||||||
|
$result->setType('col', dibi::FLOAT);
|
||||||
|
|
||||||
|
Assert::same(array('col' => NULL), $result->test(array('col' => NULL)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => TRUE)));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => FALSE)));
|
||||||
|
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '.0')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '.1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0.0')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '0.1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0.000')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '0.100')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1.0')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '1.1')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1.000')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '1.100')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '001.000')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '001.100')));
|
||||||
|
Assert::same(array('col' => 10.0), $result->test(array('col' => '10')));
|
||||||
|
Assert::same(array('col' => 11.0), $result->test(array('col' => '11')));
|
||||||
|
Assert::same(array('col' => 10.0), $result->test(array('col' => '0010')));
|
||||||
|
Assert::same(array('col' => 11.0), $result->test(array('col' => '0011')));
|
||||||
|
Assert::same(array('col' => '0.00000000000000000001'), $result->test(array('col' => '0.00000000000000000001')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '12345678901234567890')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '012345678901234567890')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '12345678901234567890.000')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890.1'), $result->test(array('col' => '012345678901234567890.100')));
|
||||||
|
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => 0)));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => 0.0)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => 1)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => 1.0)));
|
||||||
|
|
||||||
|
setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '.0')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '.1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0.0')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '0.1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0.000')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '0.100')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1.0')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '1.1')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1.000')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '1.100')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '001.000')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '001.100')));
|
||||||
|
Assert::same(array('col' => 10.0), $result->test(array('col' => '10')));
|
||||||
|
Assert::same(array('col' => 11.0), $result->test(array('col' => '11')));
|
||||||
|
Assert::same(array('col' => 10.0), $result->test(array('col' => '0010')));
|
||||||
|
Assert::same(array('col' => 11.0), $result->test(array('col' => '0011')));
|
||||||
|
Assert::same(array('col' => '0.00000000000000000001'), $result->test(array('col' => '0.00000000000000000001')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '12345678901234567890')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '012345678901234567890')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '12345678901234567890.000')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890.1'), $result->test(array('col' => '012345678901234567890.100')));
|
||||||
|
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => 0)));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => 0.0)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => 1)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => 1.0)));
|
||||||
|
setlocale(LC_NUMERIC, 'C');
|
||||||
|
});
|
||||||
|
Reference in New Issue
Block a user