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

时间:2014-01-06 19:49:45

标签: c# line division multiplication

我有这行代码:

int WStoneCost = PriceMethod.StoneCost / 100 * AP;

当PriceMethod.StoneCost等于25且AP等于70时。 我已经使用断点检查了它,我无法理解为什么在运行此行后我得到零。 (WStoneCost等于零) 这只是一个错误的符号还是我做错了什么?提前致谢。 如何在最后获得正确的双倍?像17. 5

3 个答案:

答案 0 :(得分:9)

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

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

它仍然是整数除法,但是你的输入将25 * 70(1,750)除以100,这将给你17。

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

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

由于文字100mdecimal,编译器将使用浮点十进制除法,这将为您提供decimal结果。< / p>

答案 1 :(得分:4)

  

如何在最后获得正确的双倍?像17.5

你的问题以及到目前为止给出的两个答案都表明你们三个都想做一些危险的错误。 您正在进行财务计算,因此您应始终使用decimal,而不是double double用于物理计算,而不是< em>财务计算。

答案 2 :(得分:-1)

我同意JonathanWood的观点。根据您提供的值,您的答案将产生一个小数。因此,您需要WStoneCost为double或float。此外,您可能希望在等式中使用partentheses,以确保操作顺序符合您的期望。

希望这有帮助!

-Gary The Bard