Как хранить большие числа с плавающей точкой как есть в MySQL - PullRequest
0 голосов
/ 29 сентября 2018

У меня в файле есть плавающие числа.Они получены из функции Python process_time () .Это один из примеров значений, которые я хочу сохранить в поле:

0.0034867459908127785

Мне нужно сохранить число как есть.Затем я хочу запросить MAX столбца.Когда я сохраняю значения в столбце типа FLOAT(), он округляется до: 0.00348675.Затем, когда я запрашиваю MAX, я получаю: 0.0034867459908127785 В моем случае это неприемлемо.Я не хочу никаких изменений на номера.

Как я могу хранить эти большие поплавки как есть?затем запрос MAX и получить точное количество сохраненных?Я не хочу, чтобы MYSQL округлял что-либо.Мне нужны номера без изменений.

1 Ответ

0 голосов
/ 29 сентября 2018
**First Approch:**

Вы можете сохранить данные в десятичном формате и получить максимум как:

CREATE TABLE `save_processtime1` (
  `id` INT(11) NOT NULL,
  `point_decimal` DECIMAL(25,20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;


INSERT INTO `save_processtime1` (`id`, `point_decimal`) VALUES('1','0.0034867459008127785');
INSERT INTO `save_processtime1` (`id`, `point_decimal`) VALUES('2','0.0034867459908127785');
INSERT INTO `save_processtime1` (`id`, `point_decimal`) VALUES('3','0.0034867459908127001');
INSERT INTO `save_processtime1` (`id`, `point_decimal`) VALUES('4','0.1000000021200021011');
INSERT INTO `save_processtime1` (`id`, `point_decimal`) VALUES('5','0.0032867459908127785');

mysql>SELECT MAX(point_decimal) FROM save_processtime;
+-----------------------+
| MAX(point_decimal)    |
+-----------------------+
| 0.1000000021200021011 |
+-----------------------+

Другой подход:

Вы можете сохранить эти данные втаблица с полем VARCHAR .и просто получите максимум поля.

Структура фиктивной таблицы:

CREATE TABLE `save_processtime` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `point_num` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

insert into `save_processtime` (`id`, `point_num`) values('1','0.0034867459008127785');
insert into `save_processtime` (`id`, `point_num`) values('2','0.0034867459908127785');
insert into `save_processtime` (`id`, `point_num`) values('3','0.0034867459908127001');
insert into `save_processtime` (`id`, `point_num`) values('4','0.1000000021200021011');
insert into `save_processtime` (`id`, `point_num`) values('5','0.0032867459908127785');

Выход за максимальное время:

mysql> SELECT MAX(point_num) FROM save_processtime;
+-----------------------+
| MAX(point_num)        |
+-----------------------+
| 0.1000000021200021011 |
+-----------------------+

Надеюсь, это то, что вы хотите!Первый подход лучше, чем второй:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...