代码之家  ›  专栏  ›  技术社区  ›  Rytmis

odp ado.net驱动程序在字符串表示中返回带额外零的十进制值

  •  1
  • Rytmis  · 技术社区  · 15 年前

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

    从表面上看,保存和加载来自所述现场的数据都是完美的。但是,进一步的检查表明,从数据库中读取的数字中有三个十进制数字,例如500.001,其方式是 字符串表示 小数的第四位为零(例如500.0010)。当第三个十进制数字不为零时,就会出现这种情况。

    就数学而言,这不是问题。但是,我们有验证器,通过将十进制数转换为字符串,然后对十进制数进行计数,来验证十进制数中的十进制数。由于此特定数据段被定义为最多有三个十进制数字,因此额外的零会导致验证错误。

    因为我不能更改验证器,我想知道是否有一种干净的方法可以得到不带额外零的十进制数,除了将数字转换为字符串、修剪尾随的零然后重新解析它之外?或者我应该做些完全不同的事情吗?

    2 回复  |  直到 9 年前
        1
  •  2
  •   Tamas Czinege    15 年前

    试试这个:

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

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

        2
  •  0
  •   Ray Cheng    9 年前

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