Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个简单的C#语句的效果出乎意料_C#_Line_Division_Multiplication - Fatal编程技术网

一个简单的C#语句的效果出乎意料

一个简单的C#语句的效果出乎意料,c#,line,division,multiplication,C#,Line,Division,Multiplication,我有一行代码: int WStoneCost = PriceMethod.StoneCost / 100 * AP; 而PriceMethod.StoneCost等于25,AP等于70。 我已经用断点检查过了,我不明白为什么我在运行这一行之后得到零。(WStoneCost等于零) 这只是一个错误的符号还是我做错了什么?提前谢谢。 最后如何得到正确的双精度?比如17.5你在做整数除法,所以25/100是0,而不是0.25,因此0*70是0。由于您的结果变量也是一个int,因此不清楚您期望的结果是

我有一行代码:

int WStoneCost = PriceMethod.StoneCost / 100 * AP;
而PriceMethod.StoneCost等于25,AP等于70。 我已经用断点检查过了,我不明白为什么我在运行这一行之后得到零。(WStoneCost等于零) 这只是一个错误的符号还是我做错了什么?提前谢谢。
最后如何得到正确的双精度?比如17.5

你在做整数除法,所以
25/100
0
,而不是
0.25
,因此
0*70
0
。由于您的结果变量也是一个
int
,因此不清楚您期望的结果是什么,但您可以重新排序操作以获得非零答案:

int WStoneCost = (PriceMethod.StoneCost * AP)/ 100 ;
它仍然是整数除法,但如果输入25*70(1750)除以100,则得到17

如果需要浮点十进制结果,只需使用
100m

decimal WStoneCost = (PriceMethod.StoneCost * AP)/ 100m ;

由于文本
100m
是一个
decimal
,编译器将使用浮点十进制除法,这将给您一个
decimal
结果。

您正在进行整数除法,因此
25/100
0
,而不是
0.25
,因此
0*70
0
。由于您的结果变量也是一个
int
,因此不清楚您期望的结果是什么,但您可以重新排序操作以获得非零答案:

int WStoneCost = (PriceMethod.StoneCost * AP)/ 100 ;
它仍然是整数除法,但如果输入25*70(1750)除以100,则得到17

如果需要浮点十进制结果,只需使用
100m

decimal WStoneCost = (PriceMethod.StoneCost * AP)/ 100m ;

由于文本
100m
是一个
十进制
,那么编译器将使用浮点十进制除法,这将给您一个
十进制
结果。

我同意JonathanWood的观点。根据您提供的值,您的答案将生成一个小数。因此,您需要WStoneCost是double或float。此外,您可能希望在方程式中使用partenthese,以确保按照您的期望执行操作顺序

希望这有帮助


-诗人加里我同意乔纳桑伍德的观点。根据您提供的值,您的答案将生成一个小数。因此,您需要WStoneCost是double或float。此外,您可能希望在方程式中使用partenthese,以确保按照您的期望执行操作顺序

希望这有帮助

-诗人加里

最后如何得到正确的双精度?像17.5

你的问题和目前给出的两个答案都表明你们三个都想做一些危险的错误您正在进行财务计算,因此应始终使用
十进制
,切勿使用
双精度
双精度
用于物理计算,而不是财务计算

最后如何得到正确的双精度?像17.5



你的问题和目前给出的两个答案都表明你们三个都想做一些危险的错误您正在进行金融计算,因此您应该始终使用
十进制
,切勿使用
双精度
双精度
用于物理计算,而不是金融计算。

可能您的一些变量是整数而不是浮点<代码>(int)(25/100)等于0。@JonathanWood:我认为有100%的可能性。它们都是整数。对不起,我是新手。@paqogomez不,
*
/
运算符是从左到右应用的,因此它相当于
(25/100)*70
@paqogomez-它真的优先于乘法而不是除法吗?当我运行这行代码时:
double WStoneCost=25.0/100.0*70结果为17.5。我的理解是,乘法和除法具有同等的优先级,因此按照从左到右的顺序执行。(D Stanley比我强!)也许你的一些变量是整数而不是浮点<代码>(int)(25/100)
等于0。@JonathanWood:我认为有100%的可能性。它们都是整数。对不起,我是新手。@paqogomez不,
*
/
运算符是从左到右应用的,因此它相当于
(25/100)*70
@paqogomez-它真的优先于乘法而不是除法吗?当我运行这行代码时:
double WStoneCost=25.0/100.0*70结果为17.5。我的理解是,乘法和除法具有同等的优先级,因此按照从左到右的顺序执行。(D Stanley打败了我!)只需将变量类型更改为
double
不会更改结果值-它仍将使用整数除法,但随后会将
int
0转换为
double
0。我必须将100设置为100.0,这将是一个double,但无论如何还是要感谢。请不要建议人们使用
double
进行财务计算。始终使用
decimal
。仅将变量类型更改为
double
不会更改结果值-它仍将使用整数除法,但随后会将
int
0转换为
double
0。我必须将100设置为100.0,这将是一个double,但无论如何还是要感谢。请不要建议人们使用
double
进行财务计算。始终使用
decimal
。谢谢!我真的很感激。请不要建议人们使用
double
进行财务计算。始终使用
decimal
。@EricLippert好的一点-我已经修改了我的答案,以返回一个
decimal
。它们之间的区别是什么?
double
可能会有舍入错误,因为许多浮点数(如0.1)不能以二进制形式精确表示
decimal
使用不同的存储机制,因此它可以