在SQL Server 2008中将float转换为decimal

时间:2010-11-15 16:53:51

标签: sql sql-server casting

我有一个视图需要为存储为float的列返回十进制类型。

我可以将每列转换为十进制,如下所示:

, CAST(Field1 as decimal) Field1

这种方法的问题是十进制默认为18,0,它自动将浮点列舍入为0.我希望保持最多12位小数的精度。

但是,如果我这样做:

, CAST(Field1 as decimal(12,12)) Field1

我收到运行时错误:

"Arithmetic overflow error converting float to data type numeric"

浮动列在表中定义为长度:8精度:53 。我无法修改有关该表的任何内容。

将十进制数输出为十进制精度的正确方法是什么?

1 个答案:

答案 0 :(得分:23)

12, 12表示小数点分隔符前没有数字:总共12个数字,12位于句点之后。

使用更合适的范围,例如:

DECLARE @var FLOAT = 100
SELECT  CAST(@var as decimal(20,12))

在分隔符之前为您提供8个数字,或根据需要进行调整。