在SQL Server 2008中将float转换为decimal

Son*_*oul 10 sql sql-server casting

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

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

, CAST(Field1 as decimal) Field1
Run Code Online (Sandbox Code Playgroud)

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

但是,如果我这样做:

, CAST(Field1 as decimal(12,12)) Field1
Run Code Online (Sandbox Code Playgroud)

我收到运行时错误:

"Arithmetic overflow error converting float to data type numeric"
Run Code Online (Sandbox Code Playgroud)

float列定义为length:8精度:表格中的53.我无法修改有关该表的任何内容.

什么是以十进制表示丢失十进制精度的正确方法?

Qua*_*noi 24

12, 12表示小数分隔符之前没有数字:12总数位数,12它们位于句点之后.

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

DECLARE @var FLOAT = 100
SELECT  CAST(@var as decimal(20,12))
Run Code Online (Sandbox Code Playgroud)

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