【问题标题】:Casting from Decimal to Float从十进制转换为浮点数
【发布时间】:2011-08-11 02:19:43
【问题描述】:

我正在做一些数学计算。这是我的代码:

   decimal FirstYr = decimal.Round((first / second), 5);

如果我通过 first = 20second = 34,我将在 FirstYr 中获得 0.58824 的值。这很好。现在我在我的 LINQ 中进行此计算:

   ev.HiComm = (float)(FirstYr * 100);

HiCommDB 中是浮动的,上面的计算是传递值:58.824001312255859

我不想要它。我想在我的ev.HiComm = 58.824

我在这里做错了什么?

【问题讨论】:

  • 这可能会让你感兴趣:stackoverflow.com/questions/122523/…
  • 任何理由你不只是将第一行代码乘以 100
  • 我可以这样做,但无论哪种方式我都需要将其转换为浮动!
  • @Luke:我尝试了你的方法,它奏效了。谢谢!
  • 我为您上面的代码创建了一个单元测试,它对我有用。希望有人能给出真正的答案,我不明白为什么移动 * 100 应该使它起作用:-/

标签: c# asp.net casting floating-point decimal


【解决方案1】:

如果您想要在该点之后正好 3 位,您必须将您的 sql 字段更改为 decimal(x,3) 其中 x 是 3 加上您在小数点前需要的最大位数。 float 无法存储您想要的确切值。

【讨论】:

  • 将从数据库读取的值处理回您想要的格式?如果您的值需要如此精确,float 将是不够的。
  • @Mayank Raj:您唯一能做的就是在从数据库中获取值时将值四舍五入到小数点后 3 位。
  • @lincolnk:缺乏精确性不是问题。问题是希望以二进制格式存储小数。
  • @Michael:它实际上是用于在 MSSQL 2008 中创建报告/作业。我不能这样做。我唯一的选择是更改数据库中的数据类型或更改我的代码中的某些内容...
  • @Mayank Raj:然后更改 DB 数据类型 - 这才是真正正确的解决方案。
【解决方案2】:

它在后面的代码中是这样工作的:

 decimal FirstYr = decimal.Round((first / second), 5)*100;
 ev.HiComm = (double)FirstYr ;

感谢您的所有建议!

【讨论】:

  • 您所做的只是将小数转换为双精度数,这就引出了您在数据库中使用浮点(十进制)值的原因的问题。
猜你喜欢
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2010-12-08
  • 2016-06-02
相关资源
最近更新 更多