首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >十进制(10,9)变量不能保持数字50 ( Server 2008)

十进制(10,9)变量不能保持数字50 ( Server 2008)
EN

Stack Overflow用户
提问于 2012-08-30 23:57:07
回答 5查看 19.7K关注 0票数 7

这个很简单。为什么下面的代码会导致下面的错误?

代码语言:javascript
复制
declare @dTest decimal(10, 9)
set @dTest = 50

错误:

代码语言:javascript
复制
Msg 8115, Level 16, State 8, Line 3
Arithmetic overflow error converting int to data type numeric.

根据MSDN文档 on decimal(p, s)p (在我的例子中是10 )是“可以存储在小数点左边和右边的十进制数字的最大总数”,而s (在我的例子中是9)是“可以存储在小数点右侧的最大十进制数”。

我的数字,50,只有2位数字总计(小于最大值10),0位数在小数的右边(小于最大值9),因此它应该能工作。

我在这个问题中发现了本质上相同的问题,但没有人解释为什么文档似乎与行为冲突。看起来,s维实际上被解释为小数点右边的固定数字,并从p数中减去,在我的例子中,只有10-9=1位数才能处理左侧。

有人能提供一种合理的方式来解释文档的编写以匹配行为吗?

编辑:

我在下面看到了一些解释,但它们并没有解决文档的基本问题。我建议在措辞上作如下修改:

对于"p (精度)“,”更改“可存储的最大十进制数字总数”读“”将存储的十进制数字的最大总数“。

对于"s (刻度)“,”更改“可以存储在小数点右侧的最大小数位数。以“将存储在小数点右侧的小数位数。该数字从p中减去,以确定小数点左侧的最大数字数。”

我将向Connect提交一个bug报告,除非有人有更好的解释。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-31 00:29:23

我向Connect提交了一个bug报告:关于十进制数据类型的误导性文档

票数 7
EN

Stack Overflow用户

发布于 2012-08-30 23:58:40

10 -9是1. DECIMAL(10, 9)可以用0.000000000格式保存一个数字.50在小数点之前有两位数,因此超出了范围。你自己引用了它:

根据关于十进制(p,s)的MSDN文档,p(在我的例子中是10 )是“可以存储的最大十进制数字总数,在小数点的左边和右边”,而s(在我的例子中是9)是“可以存储在小数点右侧的最大小数位数”。

票数 12
EN

Stack Overflow用户

发布于 2012-08-31 00:00:06

解释文档的一个合理方法是不忽略尾随的十进制零位数。所以你的数字在小数点右边有9个小数位,它们都是0

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12207222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档