数字精度说明符超出范围 (1 到 38)问题

bbqqqbq 2009-06-03 10:00:47
今天碰到一个很变态的问题,请高手赐教:
c#

写了一个类,这个类的如下两个属性
private decimal _minmoney=20.1;
private decimal _maxmoney = 30.1;

oracle数据库:
与这两个相对应的表的字段为:
minmoney decimal
maxmoney decimal

插入数据时总提示:数字精度说明符超出范围 (1 到 38)
将表的字段改为
minmoney number(10,4)
maxmoney number(10,4)
插入数据时还是提示:数字精度说明符超出范围 (1 到 38)

没办法,只有改类属性了:
private float _minmoney=20.1;
private float _maxmoney = 30.1;
表字段类型为:
minmoney number(10,4)
maxmoney number(10,4)

这样插入数据就没问题。
真是想不通为什么类属性就不能设为
minmoney decimal
maxmoney decimal


请大家说说这是个什么原因呢?
...全文
2652 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbqqqbq 2009-06-03
  • 打赏
  • 举报
回复
只能这样了,
现在方便起见,只有改类属性类型了:
private decimal _minmoney=20.1m;
private decimal _maxmoney = 30.1m;
改成
private float _minmoney=20.1f;
private float _maxmoney = 30.1f;

表还是
minmoney number(10,4)
maxmoney number(10,4)
SQL77 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bbqqqbq 的回复:]
引用 7 楼 bbqqqbq 的回复:
private decimal _minmoney=20.1m;
private decimal _maxmoney = 30.1m;
表字段为
minmoney number(10,4)
maxmoney number(10,4)

这样做插入操作,还是报数字精度说明符超出范围 (1 到 38)


private decimal _minmoney=20.1m;
private decimal _maxmoney = 30.1m;

minmoney numeric(38,4)
maxmoney numeric(38,4)

minmoney decimal(38,4)
maxmoney decimal(38,4)

[/Quote]
刚才查了下,ORCALE中数据类型!!!
那应该是NUMBER(38,10)这样试试看??
要不然到ORCALE版去问下
bbqqqbq 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bbqqqbq 的回复:]
private decimal _minmoney=20.1m;
private decimal _maxmoney = 30.1m;
表字段为
minmoney number(10,4)
maxmoney number(10,4)

这样做插入操作,还是报数字精度说明符超出范围 (1 到 38)
[/Quote]

private decimal _minmoney=20.1m;
private decimal _maxmoney = 30.1m;

minmoney numeric(38,4)
maxmoney numeric(38,4)

minmoney decimal(38,4)
maxmoney decimal(38,4)

这样做插入操作,还是报数字精度说明符超出范围 (1 到 38)
SQL77 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bbqqqbq 的回复:]
private decimal _minmoney=20.1m;
private decimal _maxmoney = 30.1m;
表字段为
minmoney number(10,4)
maxmoney number(10,4)

这样做插入操作,还是报数字精度说明符超出范围 (1 到 38)
[/Quote]
minmoney numeric(38,4)
maxmoney numeric(38,4)

minmoney decimal(38,4)
maxmoney decimal(38,4)
将数据库字段改成这样试试
SQL77 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jimh 的回复:]
private decimal _minmoney=20.1;
private decimal _maxmoney = 30.1;
//默认是double类型的,转换成decimal后是后面带.00000000001的那种数字,例如
20.100000000000000000000000000000000000......01

20.099999999999999999999999999999999999......99

应该要改成:
private decimal _minmoney=20.1m;
private decimal _maxmoney = 30.1m;
这样就没问题了。
[/Quote]
如果不加M的话应该报错了
bbqqqbq 2009-06-03
  • 打赏
  • 举报
回复
private decimal _minmoney=20.1m;
private decimal _maxmoney = 30.1m;
表字段为
minmoney number(10,4)
maxmoney number(10,4)

这样做插入操作,还是报数字精度说明符超出范围 (1 到 38)
jimh 2009-06-03
  • 打赏
  • 举报
回复
private decimal _minmoney=20.1;
private decimal _maxmoney = 30.1;
//默认是double类型的,转换成decimal后是后面带.00000000001的那种数字,例如
20.100000000000000000000000000000000000......01

20.099999999999999999999999999999999999......99

应该要改成:
private decimal _minmoney=20.1m;
private decimal _maxmoney = 30.1m;
这样就没问题了。
SQL77 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bbqqqbq 的回复:]
那如果类属性的数据类型为DECIMAL的话,那在oracle里,相对应的表的字段的类型应该设成什么样的呢?
[/Quote]
数据库里MSSQL DECIMAL 最大的精度是38 那你可以设最大呀!!!DECIMAL(38,小数位数)前一个是精度!!!
SQL77 2009-06-03
  • 打赏
  • 举报
回复
oracle数据库:
与这两个相对应的表的字段为:
minmoney decimal
maxmoney decimal
如果你默认,
小数位数就为0
所以你插入的时候可能会提示精度超出范围!!
不知道ORCLE哦,
bbqqqbq 2009-06-03
  • 打赏
  • 举报
回复
那如果类属性的数据类型为DECIMAL的话,那在oracle里,相对应的表的字段的类型应该设成什么样的呢?
SQL77 2009-06-03
  • 打赏
  • 举报
回复
将表的字段改为
minmoney number(10,4)
maxmoney number(10,4)
??
表字段类型还有NUMBER]
应该是NUMERIC或DECIMAL 吧
SQL77 2009-06-03
  • 打赏
  • 举报
回复
DECIMAL 是128位高精度!!!当然超出范围!!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧