十进制的高(ish)精度数学

时间:2014-09-11 23:09:58

标签: c# math decimal visual-c#-express-2010

问题:

我正在使用Visual C#Express 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等不包含小数(我不这么认为)

我的努力:

3 个答案:

答案 0 :(得分:4)

尝试100m / totalKeywords / 100

你必须将你的一个数字(至少)定义为十进制。

100是一个int

100m是小数

http://msdn.microsoft.com/en-us/library/364x0z75.aspx

如果您希望将数字实数文字视为十进制,请使用后缀m或M,例如:

decimal myMoney = 300.5m;

答案 1 :(得分:4)

让我们分解一下:

decimal onePercent = 100 / totalKeywords / 100;

首先,将整数文字100除以整数变量totalKeywords(值为3)。结果:整数33。

接下来,将结果33除以整数字面数100.结果:整数0。

右侧表达式的类型为int,值为0.将其隐式转换为decmal 0m,因此您可以将其分配给十进制变量onePercent。

结果:0m。

正如其他人已经注意到的那样,要修复最左边的常数(如果不是全部,为清晰起见),则将其设为小数。这样做,因为int将隐式转换为decimal:

decimal onePercent = 100m / totalKeywords / 100;

这完全是明确的,如果有点超过顶部:

decimal onePercent = 100m / (decimal)totalKeywords / 100m;

答案 2 :(得分:2)

在计算后右侧的

将只得到整数,然后它将被分配给十进制,因此它给你0.