ODP ADO.NET 驱动程序在字符串表示中返回带有额外零的十进制

Posted

技术标签:

【中文标题】ODP ADO.NET 驱动程序在字符串表示中返回带有额外零的十进制【英文标题】:ODP ADO.NET driver returns decimal with extra zero in string representation 【发布时间】:2010-12-20 21:46:01 【问题描述】:

今天的问题如下:我们在Oracle数据库中有一张表。该表包含一个 Number(18, 3) 类型的字段。

从表面上看,从所述字段保存和加载数据都可以完美运行。但是,进一步检查显示,其中包含三位十进制数字的数字,例如500.001,以这样一种方式从数据库中读取,即十进制的 字符串表示 有第四个零位(例如 500.0010)。只要第三个十进制数字不为零,这似乎就会发生。

出于数学目的,这不是问题。但是,我们有验证器通过将十进制数转换为字符串然后计算十进制位数来验证十进制数中的十进制位数。由于这条特定的数据被定义为最多包含三位十进制数字,因此额外的零会导致验证错误。

由于我无法更改验证器,我想知道是否有一种干净的方法可以在没有额外零的情况下获得小数,除了将数字转换为字符串、修剪尾随零然后重新解析它?还是我应该做一些完全不同的事情?

【问题讨论】:

【参考方案1】:

试试这个:

decimal trimmed = ((decimal)((int)(number * 1000))) / 1000

转换为 int 会去掉小数部分。您不需要所有括号,但我认为如果明确指出操作顺序,则更容易看到发生了什么。

【讨论】:

看起来它会起作用,是的。我有点希望有一种神奇的方式告诉司机以我想要的方式获得价值,所以我可以避免这样做。但除非出现这种方式,否则我可能会选择此选项。 :-)【参考方案2】:

我遇到了同样的问题,但我使用了:number.ToString("F3")

【讨论】:

以上是关于ODP ADO.NET 驱动程序在字符串表示中返回带有额外零的十进制的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 使用ODP.NET Core连接操作Oracle数据库

使用 ADO.NET 获取 Oracle 包中过程的存储过程元数据

EF for Oracle,dotConnect for Oracle,ODP.NET

ADO.NET 实体框架 - 带有实体框架 6 的 Oracle

可以从 sql server 中的 sproc 返回到 ADO.NET 应用程序的最大数据量是多少

必须声明标量变量错误 ADO.NET