我需要在 SQL Server 中将浮点数转换为十进制(28,10)。我的问题是,由于浮点数的性质以及转换的完成方式,简单地转换浮点数可能会使我的用户认为它是错误的数字。
例如:
Float: 280712929.22
Cast as Decimal: 280712929.2200000300
What I think I want: 280712929.2200000000
我对 float 的工作方式有所了解(它是一种近似的数据类型等),但诚然不足以理解为什么它会在末尾添加 300。它只是作为转换的副作用的垃圾,还是以某种方式更准确地表示浮点实际存储的内容?对我来说,它看起来像是凭空而来的精确度。
最终,我需要它是准确的,但也要看起来“正确”。我想我需要得到那个底部数字,因为看起来我刚刚添加了尾随零。这可能吗?这是一个好主意还是坏主意,为什么?欢迎提出其他建议。
其他一些例子:
Float: 364322379.5731
Cast as Decimal: 364322379.5730999700
What I want: 364322379.5731000000
Float: 10482308902
Cast as Decimal: 10482308901.9999640000
What I want: 10482308902.0000000000
旁注:我将这些值放入的新数据库表可由我的用户读取。他们现在实际上只需要两位小数,但将来可能会改变,所以我们决定使用 Decimal(28,10)。长期目标是将我获取数据的浮点列也转换为十进制。
编辑:有时我的浮点数比我需要的多,例如:-0.628475064730907。在这种情况下,转换为 -0.6284750647 就可以了。我基本上需要我的结果在浮点数的末尾添加零,直到我有 10 个小数位。