转换为十进制和舍入

Son*_*oul 26 sql sql-server casting

所以看来,如果你

CAST(field1 as decimal) field1
Run Code Online (Sandbox Code Playgroud)

这将自动添加舍入.

原文定义为:

field1类型:float length:8 prec:53

我需要将它转换为十进制,因为我需要我的实体框架层生成此字段为十进制(而不是双)

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

我想避免必须在演员表中声明精度,因为1.有100个字段涉及不同的精度,1.如果基础表在将来发生变化,它可能会导致无法预料的错误出现,3.使管理变得更加困难

Abe*_*ler 51

你有没有尝试过:

SELECT Cast( 2.555 as decimal(53,8))
Run Code Online (Sandbox Code Playgroud)

这会回来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')
Run Code Online (Sandbox Code Playgroud)

回报 8|7

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