【问题标题】:Why can't I enter an integer value into a decimal field?为什么我不能在十进制字段中输入整数值?
【发布时间】:2011-02-07 11:17:24
【问题描述】:

我正在尝试为 SQL Server 表编写插入语句,将值 1 插入到十进制字段中。该字段是 decimal(10, 10) 类型,据我了解,这意味着它最多可以有 10 位数字,其中最多 10 位数字可以在小数点之后。但是,当我尝试运行插入语句时,出现以下错误:

Arithmetic overflow error converting int to data type numeric.

如果我将字段的数据类型更改为小数(11, 10),它会突然起作用。我在这里不明白什么?我做错了什么?

【问题讨论】:

    标签: sql-server casting integer decimal


    【解决方案1】:

    decimal(10, 10) 表示所有小数位,小数点左边没有数字!

    请看这里:http://msdn.microsoft.com/en-us/library/aa258832(SQL.80).aspx_

    十进制[(p[, s])]

    p(精度) 指定小数位数的最大总数 可以存储的,都在左边 和小数点的右边。 精度必须是从 1 开始的值 通过最大精度。这 最大精度为 38。默认值 精度为 18。

    s (scale) 指定最大十进制位数 存储在小数点右边 观点。比例必须是从 0 开始的值 通过 p。只能指定比例 如果指定了精度。默认 比例为 0;因此,0

    decimal(11,10) 给你小数点左边 1 位和右边 10 位,所以现在适合整数 1!

    编辑

    使用时:decimal(p,s),将 p 视为您要存储的总位数(无论小数点的左侧或右侧),将 s 视为应存储的 p 位数在小数点右边。

    DECIMAL(10,5)=     12345.12345
    DECIMAL(10,2)=  12345678.12
    DECIMAL(10,10)=         .1234567891
    DECIMAL(11,10)=        1.1234567891
    

    【讨论】:

    • 我还是一头雾水。它说比例是“可以存储在小数点右侧的最大小数位数” - 不是必须有10个。
    • 是的,但这并不意味着它是一个滑动小数点。这意味着如果您在右侧提供少于 10 个数字,则其余数字为零。
    • @Joe,我不确定你到底想说什么,但如果你运行declare @x decimal(5,2);set @x=1.123456789;select @x;set @x=1;select @x,你会得到1.12 和1.00。一旦声明了小数,小数点左右的位数是固定的,小数点不会滑动。
    • @froadie,如果你想在一个值中包含 10 个整数位和 10 个小数位:1234567891.1234567891,请使用 DECIMAL(20,10)
    • @KM,我是在回复 froadie 的评论,而不是我 +1 的你的帖子。
    猜你喜欢
    • 2012-10-12
    • 2016-07-10
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    相关资源
    最近更新 更多