Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
Php 固定点类型-“固定点类型”;准确值与否;?_Php_Mysql_Decimal_Numeric - Fatal编程技术网

Php 固定点类型-“固定点类型”;准确值与否;?

Php 固定点类型-“固定点类型”;准确值与否;?,php,mysql,decimal,numeric,Php,Mysql,Decimal,Numeric,我需要创建一个列,其中可以存储“0.0-99.99”中的值 为什么??由于这种情况: 我的数据库中有以下表格: "CREATE TABLE dumps( id INT NOT NULL auto_increment, dump_value NUMERIC(5,2), PRIMARY KEY(id), UNIQUE KEY dump_value (dump_value))

我需要创建一个列,其中可以存储“0.0-99.99”中的值

为什么??由于这种情况:

我的数据库中有以下表格:

"CREATE TABLE dumps(
                id INT NOT NULL auto_increment,
                dump_value NUMERIC(5,2),
                PRIMARY KEY(id),
                UNIQUE KEY dump_value (dump_value))";
当我插入值“1.0”时,我在表中得到这个值:“1.00”,这是因为NUMERIC希望它正好是两位数的长yea? 但当我把桌子换成这个:

"CREATE TABLE dumps(
                id INT NOT NULL auto_increment,
                dump_value NUMERIC(5,1), // <---- CHANGED
                PRIMARY KEY(id),
                UNIQUE KEY dump_value (dump_value))";
创建表转储( id INT非空自动增量,
dump_value NUMERIC(5,1),//为什么将“1.0”更改为“1.00”会出现问题。这不会改变计算中的某些内容,您仍然可以将值“00.00”存储到“99.99”。

根据您的定义

dump_value NUMERIC(4,2) UNSIGNED
这将定义总共四位的列,小数点后有两位


在您更改的示例中,您将dump_值定义为仅包含小数点后的一位。

1.00有什么问题?如果您担心显示目的,请让显示代码处理格式化数字,而不是数据库。存储和显示应以不同的方式处理,它们有不同的目的我需要精确存储由于后面的操作,所以给定的值如何处理?@user2999787您需要对当前格式无法处理的数据执行什么操作?
1+2=3
1.00+2=3
1.000000000000000000000000000000000000000000000000000000000000+2=3
除非我们讨论在屏幕上显示它,否则计算结果是相同的用户。如果我们谈论的是将其显示给用户,那么在数据库级别解决此问题是错误的。因为我以后需要对这些数据做更多的操作,所以您能告诉我如何解决我的问题吗?您好!:)在我看来,我会将数据类型更改为float,并让程序检查插入的值是否只有点后的数字。例如,在php中,在所需的2位之后剪切每个数字的代码是:
$desired=((int)($value*100)/100)%100
如果$value是要插入到数据库中的值,则$desired是一个浮点值,只有2位或更少的点(因为括号中的部分),并且在0到99.99的范围内(感谢“%100”部分).我希望我能帮助你回答我的问题,请为我糟糕的英语道歉。对不起,我没有理解你的确切意思:/有人能帮忙吗?问候!格式是数字(5,2)是您想要的格式,只是它不断地从2.0更改为2.00。浮点数据类型几乎相同,但它支持更多的小数位数,因此您的程序必须更改您插入的值,以便数据库中不会出现像1000.9或30.928这样的数字。如果您使用php,我编写的这行代码将检查$value并减少不必要的小数位数,并将$value保持在所需的0到99的范围内。总之,您可以说:将数据类型更改为FLOAT,它不会更改为2.0到2.00,但可以在数据库中插入2.001