Лишний ноль справа у NUMERIC

При внесении в базу данных значения 0.00001 (или меньше) справа есть лишний ноль. Тип данных этого поля в базе Postgresql - NUMERIC.

Руками, через терминал, INSERT в базу - нет лишнего ноля справа. PHP, используя pg_query_params() - есть лишний ноль справа.

<?php

#условная "копейка" (0.01) дробится ещё на миллион (0.00 000 001)

define('KNBBET1', 0.00000100); //сто
define('KNBBET2', 0.00001000); //тысяча
define('KNBBET3', 0.00010000); //десять тысяч

echo gettype(KNBBET1).' '.KNBBET1."\n<br>\n"; //double 1.0E-6 (лишний ноль справа)
echo gettype(KNBBET2).' '.KNBBET2."\n<br>\n"; //double 1.0E-5 (лишний ноль справа)
echo gettype(KNBBET3).' '.KNBBET3."\n<br>\n"; //double 0.0001 (нет лишнего ноля)

?>

Ответы (1 шт):

Автор решения: Km12

Встретился с подобной проблемой в t-SQL (Transact-SQL/MSSQL) и нашёл решение.

При составлении результирующей таблицы в столбцах, которые имели изначально заданный тип NUMERIC(24, 3) добавлялись значения с уточнением до 4-го знака после запятой (пример: выводило 20.0000, а ожидалось 20.000).

При этом простой тест с SELECT'ом выдавал корректное значение

SELECT CAST(1 as NUMERIC(24, 3))  >>  1.000

Было опробовано решение завернуть в cast с тем же NUMERIC(24, 3) столбцы в SELECT'е результирующего набора, но это не дало результата, также выдавало с уточнением до 4-го знака.

Решение

Удалось получить корректные значения, заменив NUMERIC(24, 3) на DECIMAL(24, 3) при создании таблицы для результирующего набора:

SELECT CAST(1 as DECIMAL(24, 3))  >>  1.000
→ Ссылка