- 我的表中很少有带有小数类型金额列的字段。
- 此列将包含存款金额(正值)或取款金额(负值)。
- 我将正值存储为 120,将负值存储为 -50。
- 我对该列求和并得到了预期的结果。
- Mysql版本是:5.1.33-community。
当我检查有关十进制的 mysql 文档时,我对它们的描述感到困惑。
Before MySQL 5.0.3, if you inserted
+0003.1 into a DECIMAL(5,1) column, it was stored as +0003.1. As of MySQL
5.0.3, it is stored as 3.1. For negative numbers, a literal -
character is no longer stored.
Applications that rely on the older
behavior must be modified to account
for this change. http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html
当我在 phpmyadmin 中列出行时,我可以看到负号,当我计算结果时,结果符合预期。但文件说不会出现任何迹象。
用十进制存储负数好不好(我在学校没学过吗?很困惑)?...或者我们必须使用浮点数。
-
我不知道浮动会使计算复杂化,并建议在某些条件下坚持使用小数。
我想就此提出建议。
据我了解,文档说它不会存储literal "-" 特点,这意味着它现在可能正在执行其他有符号 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 表示与表示 0 的 00000000 是多余的。负零和正零之间没有区别,因此负的最高有效位始终是该值该位本身(但为负)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)