根据MySQL Numeric types documentation,其中,Float类型具有以下属性:
FLOAT [(M,D)] [未签名] [ZEROFILL]
小(单精度)浮点数。允许值为-3.402823466E + 38至-1.175494351E-38,0和1.175494351E-38至3.402823466E + 38。这些是基于IEEE标准的理论限制。实际范围可能略小,具体取决于您的硬件或操作系统。
M是总位数,D是小数点后面的位数。如果省略M和D,则将值存储到硬件允许的限制。单精度浮点数精确到大约7位小数。
UNSIGNED,如果指定,则禁止否定值。
我想确定unsigned float
的行为是否与unsigned int
的行为类似,其中十进制和尾数的完整位深度用于表示正值,或{{1}只能防止负值。
答案 0 :(得分:3)
我想确定unsigned float的行为是否类似于 unsigned int的行为,其中的完整位深度 decimal和mantissa用于表示正值,或
没有。 MySQL选择为其FLOAT
使用IEEE-754单精度浮点数。 IEEE Float是" sign-magnitude",因此符号位占据了自己的特定位置。另一方面,INT
是2的补码编码。因此,符号的位可以被解释为符号或值的扩展。 (警告:几乎所有当前的计算机硬件都按照本段所述的方式工作;但可能有一些没有。一个古老的例子:CDC 6600使用1的补充。)
如果无符号浮点数仅防止负值。
是
必须说明的是:如果您使用的是固有的不精确FLOAT
数据类型,您应该考虑为什么您的问题空间会禁止所有负数。这些数字忠实地代表了问题空间吗? FLOAT
的不精确性是否适用于您所代表的内容?
浮点数上可能存在无计算的想法是虚幻的。只从整数生成它们涉及计算。是的,它直接在计算机芯片上完成,但它仍在计算中。
并且,丢包的例子是
尊重你,你会过度思考这个问题。
无论添加到其上的选项如何, FLOAT
总是占用4个字节。另一方面,DECIMAL(m,n)
占用约(m / 2)个字节。
FLOAT(m,n)
,可能毫无用处。 n
表示将以十进制舍入到n个位置,然后存储到二进制数字(IEEE Float)中,从而导致另一个舍入。