【问题标题】:SQL Server 2005 varchar loses decimal places converting to a decimalSQL Server 2005 varchar 丢失小数位转换为小数
【发布时间】:2008-12-24 09:44:42
【问题描述】:
Declare @BadDecimal varchar(5)
Set @BadDecimal = '4.5'
Declare @GoodDecimal Decimal
Set @GoodDecimal = @BadDecimal
Select @GoodDecimal

--Outputs 5

为什么?

【问题讨论】:

    标签: sql-server decimal


    【解决方案1】:

    试试

    Declare @GoodDecimal Decimal(2,1)
    

    编辑:请求后更改为 (2,1)。

    【讨论】:

    • 谢谢,我总是很高兴为您服务
    • 您可能应该编辑您的帖子。 Decimal(2,2) 不正确。存储 4.5 的精度和小数位数的最小值是 Decimal(2,1)。
    【解决方案2】:

    Coentjie 打败了我 arrggg...

    您需要使用这种格式 Decimal(p,s) 声明您的小数

    p = 可以存储的小数位数的最大总数,包括小数点的左侧和右侧。精度必须是 1 到最大精度 38 之间的值。默认精度为 18。

    s = 小数点右侧可以存储的最大小数位数。 Scale 必须是从 0 到 p 的值。仅当指定精度时才能指定比例。默认比例为 0;因此,0

    【讨论】:

    • 很高兴成为第一个 ;-) 通常我是一个有点太慢的人。
    【解决方案3】:

    试试Set @BadDecimal = '4,5'

    【讨论】:

      【解决方案4】:

      强制转换或转换为显式十进制(数字,精度)有效:

      SELECT CONVERT(DECIMAL(5, 2), '4.5')
      SELECT CAST('4.5' AS DECIMAL(5,2))
      

      SQLServer 帮助声明(数字、精度)的每个组合都作为单独的数据类型处理。

      【讨论】:

      • 如果你在字符串中使用参数@BadDecimal,这不起作用
      猜你喜欢
      • 2013-12-28
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多