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在使用金钱时使用以避免舍入错误.
decimal
Sam*_*der 8
不要使用Math.Round将其转换为圆形.最好使用十进制类型作为货币
Ode*_*ded 5
这是由于浮点舍入错误而发生的.浮点数无法以二进制形式准确表示,因此会出现诸如您遇到的那样的舍入错误.有关更多详细信息,请参阅此维基百科文章.
要克服这一点,你应该舍入到最接近的整数 - 这最好通过使用来实现Math.Round.
Math.Round
但是,在处理货币时,最好使用该decimal类型代替double.
double
归档时间:
15 年,10 月 前
查看次数:
219 次
最近记录:
14 年,10 月 前