C# 除法返回零

C# 除法返回零,c#,C#,这个简单的计算返回零,我无法计算: decimal share = (18 / 58) * 100; 18/58是一个整数除法,结果为0 如果需要十进制除法,则需要使用十进制文字: decimal share = (18m / 58m) * 100m; 因为这些数字是整数,你要进行整数除法 18/58是整数除法中的0。您正在处理整数。尝试对计算中的所有数字使用小数 decimal share = (18m / 58m) * 100m; 小数份额=(18*100)/58 由于有些人几乎从任何

这个简单的计算返回零,我无法计算:

decimal share = (18 / 58) * 100;

18/58
是一个整数除法,结果为0

如果需要十进制除法,则需要使用十进制文字:

decimal share = (18m / 58m) * 100m;

因为这些数字是整数,你要进行整数除法


18/58
是整数除法中的
0

您正在处理整数。尝试对计算中的所有数字使用小数

decimal share = (18m / 58m) * 100m;

小数份额=(18*100)/58

由于有些人几乎从任何计算结果为0的线程链接到这一点,因此我将此添加为解决方案,因为并非所有其他答案都适用于案例场景

需要对各种类型进行计算以获得结果的概念适用,但是上面只显示“十进制”,并使用其缩写形式,如
18m
,作为要计算的变量之一

// declare and define initial variables.
int x = 0;
int y = 100;

// set the value of 'x'    
x = 44;

// Results in 0 as the whole number 44 over the whole number 100 is a 
// fraction less than 1, and thus is 0.
Console.WriteLine( (x / y).ToString() );

// Results in 0 as the whole number 44 over the whole number 100 is a 
// fraction less than 1, and thus is 0. The conversion to double happens 
// after the calculation has been completed, so technically this results
// in 0.0
Console.WriteLine( ((double)(x / y)).ToString() );

// Results in 0.44 as the variables are cast prior to calculating
// into double which allows for fractions less than 1.
Console.WriteLine( ((double)x / (double)y).ToString() );

每当我遇到这样的情况,我只是向上投射分子

double x = 12.0 / 23409;
decimal y = 12m / 24309;

Console.WriteLine($"x = {x} y = {y}");

当除以数字时,我使用double或decimal,否则我得到0,使用这段代码,即使firstIntVar&&secondIntVar是int,它也会返回预期的答案

这对我来说是新的,我只是跟着我的计算器。不清楚为什么文字“18”被编译成整数。为了澄清,根据语言规范(词汇结构>标记>文字),使用“十进制数字”0到9编写的任何文字在添加“m”后编译为“第一种类型,其中可以表示其值:
int
uint
long
ulong
”后缀文本现在被视为一个类型,编译为类型
decimal
。例如:
var check=(1/(decimal)7)*100=14.285714
将分母转换为decimal将解决此问题。欢迎使用堆栈溢出。没有任何解释的代码转储很少有帮助。堆栈溢出是关于学习,而不是提供盲目复制和粘贴的代码片段。请回答您的问题,并解释它如何回答所问的具体问题。看见这一点在用现有答案回答老问题(这一个已经超过9岁)时尤为重要。这个答案如何改进已有的答案?
 double res= (firstIntVar * 100f / secondIntVar) / 100f;