天天看点

as cast float server sql_sql-server – 将Float转换为Decimal(SQL Server)

我需要在SQL Server中将Float转换为Decimal(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个小数位.