【问题标题】:Convert decimal to 10-digit number将十进制转换为 10 位数字
【发布时间】:2014-06-06 00:48:20
【问题描述】:

在我的 c# 应用程序中,我有一个 decimal 值 (10.0),我需要将其插入数据库字段(字段类型 BIGINT)。当前在 db 中的值都是 10 位长。

如何将我的10.0 decimal 值转换为1000000000

谢谢

编辑:此字段用于插入订单交易表的订单金额。不知道为什么他们在这个字段中有 10 位的值,但是这个表中已经有数百万条记录,都包含 10 位。所以我只是想保持我的价值观不变。

这里有一些基本的附加细节。在下面的示例中,假设我在 txtOrderAmount 文本框中输入“10.00”,我需要将其转换为“1000000000”以插入数据库:

我的 c# 应用程序:

decimal orderAmount = 0;
orderAmount = Convert.ToDecimal(txtOrderAmount.Text);
if(orderAmount > 0)
{
     ledger.InsertOrderTransaction(amount);
}

这会调用 InsertOrderTransaction,然后插入到数据库中。

我的数据库表中的一些示例记录,称为“分类帐”。示例值分别为 $50.00、$10.00 和 $13.50:

分类帐ID |入职日期 |订单号 |金额

2086 | 2-14-2014 |第1123章5000000000

2087 | 2014 年 2 月 18 日 |第1197章1000000000

2088 | 2014 年 3 月 9 日 | 8741 | 1350000000

希望对您有所帮助。同样,为什么最初的开发者在这里做了一个 10 位数的 BIGINT,我不知道,但我只想保持我的值和他的一样。

【问题讨论】:

  • 为什么要把10转换成1000000000?
  • 简单的乘法有什么问题?
  • 为什么要转换?直接插入 1000000000
  • 你收到所有这些奇怪的建议的原因是没有人了解你有什么或你想做什么。请为我们提供这些10.0 decimal 数据的示例,以及您要完成的工作。
  • 该表上大于 99.99 的值会是什么样子?

标签: c# asp.net


【解决方案1】:

试试

decimal orderAmount = 0;
orderAmount = Convert.ToDecimal(txtOrderAmount.Text);
if(orderAmount > 0)
{
     ledger.InsertOrderTransaction(amount * 100000000);
}

这是一个简单的乘法,如果 InsertOrderTransaction 方法接受一个整数,则将小数视为整数

【讨论】:

    【解决方案2】:

    最简单的方法就是乘法:

    Decimal myBigNumber = smallNumber * 100000000;
    

    这有一个重要的警告:任何 >= 100 的数字都会中断也就是说,它们的长度为 11 位。此外,,因为它们的长度为 9 位。

    因为整数不存储小数位信息,所以没有简单的方法可以在不添加字段或转换为浮点类型的情况下解决此问题。删除 10-99 要求将无法转换回 10.0。

    【讨论】:

      【解决方案3】:

      感谢您的帮助。答案的问题是计算假设数字将在 10-99 之间。

      我稍微调整了一下,以便能够计算任何值:

      int wholeVal = (int)amount;  //"amount" is a double & the original value from the textbox.  Counvert it to an int
      int wholeValLength = wholeVal.ToString().Replace(",", "").Length;  //get the length of int
      string calculation = "1";  //number to calculate begins with 1
      for (int i = wholeValLength; i < 10; ++i)
      {
           //add zeros to the calculation value
           calculation += "0";  
      }
      double dblCalculation = Convert.ToDouble(calculation);  
      ledgerAmount = amount * dblCalculation;  //perform calculation
      

      【讨论】:

      • 在执行此操作时要非常、非常小心。当您删除 10-99 要求时,转换返回功能非常重要(实际上是不可能的)。你怎么知道除以什么?
      猜你喜欢
      • 2011-05-23
      • 2014-02-15
      • 2018-05-04
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 2012-03-14
      相关资源
      最近更新 更多