【问题标题】:Mapping .NET floating point datatypes to Oracle NUMER(P,S) columns将 .NET 浮点数据类型映射到 Oracle NUMBER(P,S) 列
【发布时间】:2010-10-04 16:49:41
【问题描述】:

我正在编写的 .NET 应用程序需要在 Oracle 数据库中存储 .NET floatdoubledecimal 数据类型。在Oracle中定义数字列类型时,必须指定数字的精度和小数位数:

NUMBER(p,s)

p 是精度或总位数。 Oracle 保证数字的可移植性,精度范围为 1 到 38。

s 是小数点或小数点右侧的位数。范围可以从 -84 到 127。

作为我这个懒惰的程序员,我松散地使用“程序员”这个头衔,我希望其他人已经花时间找出好的 NUMBER(p,s) 浮点、双精度和十进制 .NET 数据类型的默认值?

【问题讨论】:

    标签: .net oracle


    【解决方案1】:

    如果您使用的是最新版本的 Oracle,您可能需要考虑改用 BINARY_FLOAT 或 BINARY_DOUBLE(对于 .net 浮点数/双精度数)。它们使用相同的 IEEE 二进制表示,因此在与数据库格式之间进行转换时不会丢失数据。

    .NET 十进制的最大精度为 28,因此定义更高精度的 Oracle 数字是没有用的。

    【讨论】:

      【解决方案2】:

      您不必指定精度和比例。如果您不使用它们,Oracle 将允许您指定任何您喜欢的精度和比例。如果您指定它们,那么 oracle 将不允许您超出您指定的范围,并且会舍入超出的精度。

      将 (p,s) 视为对数据的编辑检查。通过指定它们,您可以在大小和精度方面限制数据。在内部,它们与 Oracle 相同:NUMBER 列与 NUMBER(p,s) 列的大小相同。

      您对 p 和 s 的选择更多地取决于您的应用程序约束。

      【讨论】:

      • 这样的问题是,当你来读的时候你需要读成一个oracle十进制,然后再转换成一个double!
      猜你喜欢
      • 1970-01-01
      • 2017-08-30
      • 2011-07-26
      • 2010-09-25
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 2012-06-16
      相关资源
      最近更新 更多