将.NET浮点数据类型映射到Oracle NUMBER(P,S)列

时间:2009-01-31 18:51:48

标签: .net oracle

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

NUMBER(p,s)

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

s 是小数点右侧的比例或位数。比例范围从-84到127.

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

您无需指定精度和比例。如果您将它们关闭,Oracle将允许您指定您喜欢的任何精度和比例。如果你指定它们,那么oracle将不允许你超过你指定的比例,并且会使精度过高。

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

您对p和s的选择更多地取决于您的应用约束而不是其他任何内容。