【问题标题】:C#: Store number in database with 2 places of decimal. Eliminate unwanted numbersC#:在数据库中存储数字,保留 2 位小数。消除不需要的号码
【发布时间】:2013-07-13 18:10:47
【问题描述】:

我有一个像这样声明的字段 NumberValue1

public double NumberValue1 { get; set; }

NumberValue1 在 甲骨文数据库

我从一个 Excel 文件中读取了一个值,该值是 22.55

[[col8Value is an object type]]

然后我就这样做了。

NumberValue1 = col8Value == null ? 0 : Math.Round(Convert.ToDouble(col8Value),2)

当我将它插入数据库时​​,我得到了下面存储的数字

22.550000000000001

为什么会带来另一个...00001。

我只想让它显示 22.55,这是我加载的初始数字

谢谢。

【问题讨论】:

  • 你试过用十进制代替双精度吗?
  • Well Double != 特别是 Oracle 中的数字,但这不仅仅是一个普通的浮点精度问题吗?如果您希望 Oracle 始终只存储 2 位小数,那么不要在 Oracle 中一般使用 Number,而是使用 Number(Precision, Scale)
  • What Every Computer Scientist Should Know About Floating-Point Arithmetic.。如果您想要小数位,请使用小数类型而不是浮点类型。
  • 这是10基数的二进制表示问题,用于在内存中存储double。
  • @user2320476 您不需要更改数据库列类型,只需在应用程序中使用不同的数据类型(提示 - 使用小数)

标签: c# oracle floating-point


【解决方案1】:

尝试使用

private int NumberStoreHundreths
public double NumberValue1 
{ 
     get
          {
             return ((double)NumberStoreHundreths)/100;
          } 
     set
          {
             NumberStoreHundreths = (int)(value*100);
          }
}

有点老派,但应该可以工作

【讨论】:

    【解决方案2】:

    您不需要更改 db 列类型,只需在应用程序中使用不同的数据类型(提示 - 使用小数)。 (Koka Chernov 的回答)

    这解决了我在 2015 年的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多