C#:数字转换问题

MD *_*med 2 c# asp.net

今天我在C#遇到了一个奇怪的问题.我有一个ASP.NET页面,用户可以输入一定的价格,数量等.我得到价格值,将其转换为double,然后将其乘以100,然后将其转换为整数.当价格为"33.30"时,将其转换为双倍后,它仍为33.3(显然......),但在将其乘以100后,它变为3329.9999999999995,当我通过应用简单的强制转换运算符将其转换为整数时"(int) (价格*100)",它变成3329.

现在我不知道为什么会这样.所以我想可能你们可以帮忙:).

Dar*_*rov 10

这是因为存储双打的方式.您应该decimal在使用金钱时使用以避免舍入错误.


Sam*_*der 8

不要使用Math.Round将其转换为圆形.最好使用十进制类型作为货币


Ode*_*ded 5

这是由于浮点舍入错误而发生的.浮点数无法以二进制形式准确表示,因此会出现诸如您遇到的那样的舍入错误.有关更多详细信息,请参阅维基百科文章.

要克服这一点,你应该舍入到最接近的整数 - 这最好通过使用来实现Math.Round.

但是,在处理货币时,最好使用该decimal类型代替double.