При внесении в базу данных значения 0.00001 (или меньше) справа есть лишний ноль. Тип данных этого поля в базе Postgresql - NUMERIC. Руками, через терминал, INSERT в базу - нет лишнего ноля справа. PHP, используя pg_query_params() - есть лишний ноль справа. PHP: <?php #условная "копейка" (0.01) дробится ещё на миллион (0.00 000 001) define('KNBBET1', 0.00000100); //сто define('KNBBET2', 0.00001000); //тысяча define('KNBBET3', 0.00010000); //десять тысяч echo gettype(KNBBET1).' '.KNBBET1."\n"; //double 1.0E-6 (лишний ноль справа) echo gettype(KNBBET2).' '.KNBBET2."\n"; //double 1.0E-5 (лишний ноль справа) echo gettype(KNBBET3).' '.KNBBET3."\n"; //double 0.0001 (нет лишнего ноля) ?> Почему появляется лишний ноль справа?
Создание таблицы (строка 3) Код (Text): CREATE TABLE rock_scissors_paper ( game_id BIGSERIAL NOT NULL PRIMARY KEY, bet NUMERIC NOT NULL, creater_id BIGINT NOT NULL, creater_invite_id BIGINT, creater_turn VARCHAR(255) NOT NULL, player_id BIGINT, player_invite_id BIGINT, winner_id BIGINT ); Вставка в таблицу PHP: $bet = 0.00001; //столько (или меньше) образует ноль справа $_SESSION['user_id'] = 3; $_SESSION['invite'] = NULL; $turn = 'scissors'; pg_query_params(' INSERT INTO rock_scissors_paper (bet, creater_id, creater_invite_id, creater_turn) VALUES ($2, $1, $3, $4) ', array( $_SESSION['user_id'], //игрок doubleval($bet), //ставка $_SESSION['invite'], //рефовод $turn //ход ) ); Содержимое таблицы (столбец 2) Код (Text): select * from rock_scissors_paper; game_id | bet | creater_id | creater_invite_id | creater_turn | player_id | player_invite_id | winner_id ---------+-----------+------------+-------------------+--------------+-----------+------------------+----------- 1 | 0.000010 | 3 | | scissors | | | (1 row)
Вот, что происходит. Сравните PHP: <?php $bet = 0.00001; printf('%s', $bet); echo '<br />'; printf('%f', $bet); ?> и PHP: <?php $bet = '0.00001'; printf('%s', $bet); echo '<br />'; printf('%f', $bet); ?> То есть, если $bet в ячейку нужно записать именно как 0.00001, то подавайте его как строку.
Пробовал, пусть это и не строго и риск обделаться. Не прокатило. И получить отказ от базы, по тому что база принимает NUMERIC.