如何在 mysql 中按原样存储大型浮点数



>我有一个文件包含一些浮点数。它们是由python的process_time((函数产生的。这是我想要存储在字段中的值的一个例子,

0.0034867459908127785

我需要按原样存储数字。然后我想查询列的MAX。当我将值存储在类型为FLOAT()的列中时,它会四舍五入为:0.00348675.然后当我查询MAX时,我得到:0.0034867459908127785这在我的情况下是不可接受的。我不希望对数字进行任何更改。

如何按原样存储这些大型浮点数? 然后查询 MAX 并获取存储的确切数字?我不希望 MYSQL 四舍五入任何东西。我需要数字完好无损。

**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 |
+-----------------------+

希望这就是你想要的!第一种方法比第二种方法更好:)

最新更新