Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何像mysql一样存储大浮点数_Mysql_Database_Floating Point_Numbers_Decimal - Fatal编程技术网

如何像mysql一样存储大浮点数

如何像mysql一样存储大浮点数,mysql,database,floating-point,numbers,decimal,Mysql,Database,Floating Point,Numbers,Decimal,我有一个文件包含一些浮点数。它们是python函数的结果。这是我希望存储在字段中的值的一个示例 0.0034867459908127785 我需要按原样存储号码。然后我想查询列的MAX。当我将值存储在类型为FLOAT()的列中时,它将四舍五入为:0.00348675。然后当我查询MAX时,我得到:0.0034867459908127785 这对我来说是不可接受的。我不想对数字做任何更改 如何按原样存储这些大型浮标?然后查询MAX并获得存储的确切数字?我不想让任何事情变得复杂。我需要完整的数字

我有一个文件包含一些浮点数。它们是python函数的结果。这是我希望存储在字段中的值的一个示例

0.0034867459908127785
我需要按原样存储号码。然后我想查询列的
MAX
。当我将值存储在类型为
FLOAT()
的列中时,它将四舍五入为:
0.00348675
。然后当我查询MAX时,我得到:
0.0034867459908127785
这对我来说是不可接受的。我不想对数字做任何更改

如何按原样存储这些大型浮标?然后查询MAX并获得存储的确切数字?我不想让任何事情变得复杂。我需要完整的数字

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

其他方法:

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 |
+-----------------------+
您可以将此数据保存到表中,字段为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 |
+-----------------------+
最大时间的输出:

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

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

您使用的是哪个mysql版本?从您编写的内容来看,似乎值显示为“0.00348675”,但完整值正在存储。这是因为,如果存储值为0.00348675,查询最大值将返回0.00348675。如果该值不在存储值中,则无法返回0.0034867459908127785。很可能,当您显示存储值时,无论使用何种格式来显示它,都只会显示“0.00348675”,即使存储值是0.0034867459908127785(或接近它的值)。如果不是这样,您必须更具体地说明如何获得这些结果。请以足够的精度和比例查看MySQL DECIMAL数据类型。@Eric Postdischil我将字段类型从
FLOAT
更改为
DECIMAL(65,30)
。通过在右侧添加零,它似乎存储的时间比需要的时间长。所以我的号码变成:
0.003486745990812778500000000000
。max也返回这个数字。我看起来做的对吗?如果是这样,我会将此作为答案发布。@Suresh我使用的是版本
5.7.23-0ubuntu0.18.04.1
我认为这不是一个好主意。我更喜欢把数字当作数字来对待。是的,你是对的!但这是一种在varchar中存储十进制数的方法。