当我查看关于十进制的mysql文档时,我与他们的描述混淆了。
在MySQL 5.0.3之前,如果你插入了 +0003.1进入DECIMAL(5,1)列,它存储为+0003.1。截至MySQL 5.0.3 ,存储为3.1。对于负数,一个字面 - 字符不再存储。 依赖于旧版本的应用程序 行为必须修改为帐户 为了这个改变。 http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html
当我在phpmyadmin中列出行时,我可以看到负号,当我计算出结果时,正如预期的那样。但文件说没有出现任何迹象。
以十进制存储负数是不是很好(我没有在学校学过?迷茫)?...或者我们必须使用浮点数。
我知道浮动会使计算变得复杂,并建议在某些条件下坚持使用小数。
我想就此提出建议。
答案 0 :(得分:7)
根据我的理解,文档说它不会存储文字“ - ”字符,这意味着它现在可能正在执行其他签名的INTEGER字段总是这样做,它存储一个符号位来表示负数。
你仍然在数字前面看到一个减号,因为它是由于该符号位而由MySQL生成的。
如果你不理解符号位,可以考虑一个有符号字节如何存储-128到127之间的数字,而无符号字节可以存储0到255之间的数字。这是因为一个8位中的一个有符号数用于存储+/-(1为负数,0为正数),而其余位提供最多2 ^ 7(-128或127)的数字。
因此,例如,如果位1111具有符号位,则它们将等于-7(负+ 4 + 2 + 1),但如果它们是无符号的,则它们等于15(8 + 4 + 2 + 1) 。它仍然存储的位数相同。
您可能想知道为什么带符号数的负边界可以使用第8位,而正边界限制为7位的总和(比第8位少1)。这是因为10000000同时被认为是负数和第8位,因为它的表示-0否则是00000000的冗余,表示0。负零和正零之间没有区别,所以负最高有效位始终是值那个位本身(但是否定)。