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

有没有一种方法可以将float转换为十进制而不舍入并保持其精度?

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

    所以如果你

    CAST(field1 as decimal) field1
    

    这将自动添加舍入。

    原件定义如下:

    field1类型:浮动长度:8 prec:53

    我需要将其转换为decimal,因为我需要实体框架层将此字段生成为decimal(而不是double)。

    有没有办法把它转换成十进制,这样它就可以保持原来的精度,而不被舍入?

    我不想在演员阵容中声明精确性,因为:

    1. 有100个领域涉及不同的精度,和;
    2. 如果底层表在将来发生变化,可能会导致不可预见的错误出现;
    3. 使管理更加困难。
    3 回复  |  直到 7 年前
        1
  •  52
  •   Abe Miessler    15 年前

    你试过了吗:

    SELECT Cast( 2.555 as decimal(53,8))
    

    这会回来的 2.55500000 . 这就是你想要的吗?

    更新:

    显然,您还可以使用SQL_VARIANT_属性来查找值的精度和比例。例子:

    SELECT SQL_VARIANT_PROPERTY(Cast( 2.555 as decimal(8,7)),'Precision'),
    SQL_VARIANT_PROPERTY(Cast( 2.555 as decimal(8,7)),'Scale')
    

    回报 8|7

    你可以在转换过程中使用这个。。。

        2
  •  3
  •   CoffeeRain hugo24    13 年前

    尝试 SELECT CAST(field1 AS DECIMAL(10,2)) field1 并替换 10,2 无论你需要什么精度。

        3
  •  2
  •   JeffO    15 年前
    cast (field1 as decimal(53,8)
    ) field 1
    

    默认值为:十进制(18,0)