高精度的十进制数学
本文关键字:十进制数 高精度 | 更新日期: 2023-09-27 18:21:39
问题:
我正在使用Visual C#速成版2010。我试着把三个整数除,结果总是0。
我的代码:
//earlier in the code:
int totalKeywords = 3;
//the problem code:
decimal onePercent = 100 / totalKeywords / 100; //100% divided by the number of keywords divided by 100 to make one percent
MessageBox.Show(onePercent);
//result: 0
//what I want: 0.33 or more acurate
我尝试过的:
- 我已更改totalKeywords的值
- 我试过onePercent作为double、int、float等
猜测:
- 可能是由于某种原因,内置的数学不起作用(为什么??)
- 可能是decimal/int/float等不包含小数(我不这么认为)
我的努力:
- 谷歌
- 堆栈溢出
- C#高精度计算
- C#高双精度
- 等等
让我们来分解一下:
decimal onePercent = 100 / totalKeywords / 100;
首先,将整数文字100除以整数变量totalKeywords(值为3)。结果:整数33。
接下来,将结果33除以整数文字100。结果:整数0。
右侧表达式的类型为int,值为0。将其隐式转换为十进制0m,这样您就可以将其分配给十进制变量onePercent。
结果:0米。
正如其他人注意到的那样,为了解决这个问题,将最左边的常量(为了清晰起见,如果不是全部的话)变成十进制。这将起作用,因为int将隐式转换为十进制:
decimal onePercent = 100m / totalKeywords / 100;
这是完全明确的,如果有点过头的话:
decimal onePercent = 100m / (decimal)totalKeywords / 100m;
尝试100m/totalKeywords/100
你必须(至少)将你的一个数字定义为十进制。
100是int
100m是十进制
http://msdn.microsoft.com/en-us/library/364x0z75.aspx
如果您希望将数字实数视为十进制,请使用后缀m或m,例如:
decimal myMoney = 300.5m;
在右侧计算后,您将只得到整数,然后将其分配给十进制,因此它给您0。