当我检查关于十进制的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中列出行时,我可以看到负号,当我计算结果时,正如预期的那样.但文件说不会出现任何迹象.
以十进制存储负数是不是很好(我没有在学校学过?迷茫)?...或者我们必须使用浮点数.
我知道浮动会使计算变得复杂,并建议在某些条件下坚持使用小数.
我想对此提出建议.
根据我的理解,文档说它不会存储文字 " - " 字符,这意味着它现在可能正在执行其他已签名的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.负零和正零之间没有区别,所以负最高有效位始终是值那个位本身(但是否定的).