我继承了一个使用SQL Server 200x的项目,其中存储一个始终被视为问题域中百分比的值的列存储为大于1的十进制等值.例如,70%(0.7,逐字地)被存储为70,100%作为100除了需要等记住*0.01上检索到的值和*100持续值之前,它似乎并不成为一个问题在其本身.它确实让我的脑袋爆炸 ......所以有一个很好的理由让我失踪吗?是否有令人信服的理由来解决它,因为有相当数量的代码编写与伪百分比一起使用?
有一些情况发生了大于100%,但我不明白为什么这个值不会仅仅存储为1.05,例如,在这些情况下.
编辑:头部感觉更好,更聪明.感谢您的所有见解.
实际上有四个很好的理由我可以想到你可能想要存储 - 并计算整数百分比值而不是浮点数当量:
根据所选的数据类型,整数值可能占用较少的空间.
根据数据类型,浮点值可能会丢失精度(请记住,并非所有语言都具有与SQL Server类型等效的数据decimal
类型).
如果该值将非常频繁地输入或输出给用户,则将其保持为更加用户友好的格式可能更方便(当您计算时显示和转换时转换之间的决定...但请参阅下一点).
如果原则值也是整数,那么
principle * integerPercentage / 100
它使用所有整数运算通常比它的浮点等价更快(在浮点类型相当于T-SQL 类型的情况下可能明显更快decimal
).
如果它是一个字节字段,那么它在数据库中占用的空间比浮点数少,但除非你有数百万条记录,否则几乎看不出差异.