代码之家  ›  专栏  ›  技术社区  ›  Sonic Soul

在SQL Server 2008中将浮点转换为十进制

  •  10
  • Sonic Soul  · 技术社区  · 15 年前

    我有一个视图,需要为存储为float的列返回decimal类型。

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

    , CAST(Field1 as decimal) Field1
    

    这种方法的问题在于,decimal默认为18,0,这会自动将float列舍入为0。我想保持小数点后12位的精度。

    但是,如果我这样做:

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

    我得到一个运行时错误:

    "Arithmetic overflow error converting float to data type numeric"
    

    浮点列定义为长度:8精度:53 在桌子上。我不能修改这张桌子的任何东西。

    把它转换成十进制的正确方法是什么?

    1 回复  |  直到 15 年前
        1
  •  24
  •   Quassnoi    15 年前

    12, 12 表示小数分隔符前没有数字: 12 总位数, 德意志北方银行 他们是在经期之后。

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

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

    这给了你 8 分隔符前的数字,或根据需要进行调整。