有没有办法将float转换为十进制而不进行舍入并保持其精度?

时间:2010-11-12 22:12:29

标签: sql sql-server casting

所以看来,如果你

CAST(field1 as decimal) field1

这将自动添加舍入。

原文定义为:

field1类型:float length:8 prec:53

我需要将其强制转换为十进制,因为我需要我的Entity Framework层将此字段生成为十进制(而不是double)。

有没有办法将其转换为十进制,以便保留原始精度,而不是圆?

我想避免在演员表中声明精度,因为:

  1. 有100个字段涉及不同的精度,而且;
  2. 如果基础表在将来发生变化,可能会导致无法预料的错误出现,而且;
  3. 使管理变得更加困难。

3 个答案:

答案 0 :(得分:51)

你试过了吗?

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

这将返回2.55500000。这就是你想要的吗?

<强>更新

显然,您也可以使用SQL_VARIANT_PROPERTY来查找值的精度和小数位数。例如:

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

您可以在转换过程中使用此功能......

答案 1 :(得分:2)

尝试SELECT CAST(field1 AS DECIMAL(10,2)) field1并以您需要的精度替换10,2

答案 2 :(得分:1)

cast (field1 as decimal(53,8)
) field 1

默认值为:decimal(18,0)