C#将double转换为float,如何在第七位之后删除垃圾

Rob*_*ert 0 c# floating-point double

我在数据库中有一个名为Profit的字段.在我的应用程序中我计算利润:

myFunds.Profit = float.Parse(Math.Round(myFunds.Profit.Value * myFunds.Stake / myFunds.Stake, 3, MidpointRounding.AwayFromZero).ToString());
Run Code Online (Sandbox Code Playgroud)

myFunds.Profit的类型是int?.Math.Round返回值为double并且正在转换为float.在数据库中,利润保存为5,40000009536743.我知道float的精度低于double.是否可能在小数点后七位之后减少数字?

谢谢

Jon*_*eet 14

基本上,您不应该使用二进制浮点作为货币.使用保留十进制数字而不是二进制表示的东西.这不是"七位数之后的垃圾"的问题 - 这是一个使用错误表示的问题.

有关更多信息,请参阅有关二进制浮点十进制浮点的文章.

这是真正重要的是你理解的差异,以及为什么它根本不能接受使用二进制浮点对于不能以二进制浮点表示与精确值货币价值.不要试图捏造围绕你具有的问题floatdouble-移动到合适的数据类型来代替.在短期内可能会有更多的工作,但从长远来看,这将是非常可取的.

  • @Robert:购买更多内存通常是比丢失信息更好的方法:) (2认同)