我继承了一个使用SQL Server 200x的项目,其中存储一个始终被视为问题域中百分比的值的列存储为大于1的十进制等值.例如,70%(0.7,逐字地)被存储为70,100%作为100除了需要等记住*0.01上检索到的值和*100持续值之前,它似乎并不成为一个问题在其本身.它确实让我的脑袋爆炸 ......所以有一个很好的理由让我失踪吗?是否有令人信服的理由来解决它,因为有相当数量的代码编写与伪百分比一起使用?
有一些情况发生了大于100%,但我不明白为什么这个值不会仅仅存储为1.05,例如,在这些情况下.
编辑:头部感觉更好,更聪明.感谢您的所有见解.
实际上有四个很好的理由我可以想到你可能想要存储 - 并计算整数百分比值而不是浮点数当量:
decimal类型).如果原则值也是整数,那么
principle * integerPercentage / 100
Run Code Online (Sandbox Code Playgroud)
它使用所有整数运算通常比它的浮点等价更快(在浮点类型相当于T-SQL 类型的情况下可能明显更快decimal).
由于无法比较浮点值是否相等,因此可能使用整数来使 SQL 更简单。
例如
(0.3==3*.1)
Run Code Online (Sandbox Code Playgroud)
通常为 False。
然而
abs( 0.3 - 3*.1 )
Run Code Online (Sandbox Code Playgroud)
是一个很小的数字(5.55e-17)。但必须用(column-SomeValue) BETWEEN -0.0001 AND 0.0001or做所有事情是很痛苦的ABS(column-SomeValue) < 0.0001。您宁愿column = SomeValue在 WHERE 子句中执行此操作。