我想为百分数做专栏。
我需要写:1.00,2.00,99.99,100 ..%
我如何才能使用双重类型?
现在我有:
Double(4,2)
但是当我在专栏中写100时,我得到错误:
数值超出范围:1264超出列
的范围值
答案 0 :(得分:2)
查看答案here(double
和decimal
语法相同)或MySQL manual:
DOUBLE [(M,D)]
M是总位数,D是小数点后面的位数。如果省略M和D,则将值存储到硬件允许的限制。双精度浮点数精确到大约15位小数。
简而言之,DOUBLE(4,2)
表示最多4位数,小数点后<2>位 。因此,为了支持100
之前的两位小数,您需要:
double(5,2) unsigned
请注意,unsigned
不是强制性的,但如果您知道不需要负值,则可以提高性能和安全性。
答案 1 :(得分:0)
double(4,2)
表示一个总共四位数的双精度数,其中两个位于小数点右侧,这意味着您只有4-2 = 2位数。 100
小数点左边有三位数,因此出错。使用double(5,2)
代替应解决问题。
答案 2 :(得分:0)
MySQL允许使用非标准语法:
FLOAT(M,D) or REAL(M,D) or DOUBLE PRECISION(M,D).
Here, (M,D) means than values can be stored with up to M digits in total,
of which D digits may be after the decimal point.
例如,
定义为 FLOAT(7,4)的列在显示时将显示为-999.9999 。
MySQL在存储值时执行舍入,因此如果将999.00009插入FLOAT(7,4)列,则大致结果为999.0001
要解决您的问题,您需要增加M.的大小,即Double(5,2)
答案 3 :(得分:0)
我注意到还有另一件事可以帮助某人。
IN DOUBLE(M,D)
M 代表包括 D 在内的总位数, D 代表小数点后的数字,< / p>
如果某人分配了相同的 M 和 D 值,则只能在小数点后设置值,而不能在小数点后设置值。
在这里我尝试用一个例子来解释,
如果要分配诸如DOUBLE(5,5)
之类的数据类型值,则只能输入0.00001至0.99999之类的值,而不能输入1.0001或1.0000。
还有分配 D 的限制,您不能将 D 分配到大于 M 的位置,只有 M> = D