高精度的十进制数学

本文关键字:十进制数 高精度 | 更新日期: 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。