从十进制转换为浮点数

4

我正在进行一些数学计算。以下是我的代码:

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

如果我传递 first = 20second = 34,我会在 FirstYr 中得到 0.58824 的值。这很好。现在我正在使用我的LINQ进行以下计算:
   ev.HiComm = (float)(FirstYr * 100);

HiComm 是在DB中浮动的,上述计算传递的值为:58.824001312255859

我不想要这个值。我希望我的 ev.HiComm = 58.824

我在这里做错了什么?


这可能会引起您的兴趣:https://dev59.com/nXVD5IYBdhLWcg3wAGiD - womp
1
你为什么不直接将第一行代码乘以100呢? - TheLukeMcCarthy
我可以做到,但无论如何我都需要将它转换为浮点数! - RG-3
@Luke:我尝试了你的方法,有效了。谢谢! - RG-3
我为你上面的代码创建了一个单元测试,它对我有效。希望有人能给出一个真正的答案,我不明白为什么将 * 100 移动会使其工作 :-/ - TheLukeMcCarthy
2个回答

3

如果您想要小数点后恰好3位,您需要将SQL字段更改为decimal(x,3),其中x是小数点前最大位数加上3。 float无法存储您想要的精确值。


从数据库中读取的值需要处理成所需的格式吗?如果您的值需要非常精确,那么使用“float”将不足以满足要求。 - lincolnk
@Mayank Raj:你唯一能做的就是在从数据库中获取该值时将其四舍五入到小数点后三位。 - Michael Borgwardt
2
@lincolnk:缺乏精确度不是问题。问题在于希望以二进制格式存储十进制小数。 - Michael Borgwardt
@Michael:实际上是用于在 MSSQL 2008 中创建报告/作业。我做不到这一点。我唯一的选择是要么更改 DB 中的数据类型,要么更改我的代码后端中的某些内容... - RG-3
@Mayank Raj:那就改变数据库数据类型-这才是正确的解决方案。 - Michael Borgwardt

0

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

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

感谢您的所有建议!


1
你所做的只是将一个十进制数转换为双精度浮点数,这引出了一个问题:你为什么要在数据库中使用浮点数(十进制)值呢? - Security Hound

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接