(5/15)* 1185应该给395。
decimal Test = (5 / 15) * 1185;
然而,这会返回0.我做错了什么?
答案 0 :(得分:13)
5 / 15
是一个整数除法,返回0.使用5m / 15m
强制decimal
。
m
是C#后缀,用于向编译器表明您编写的数字为decimal
,即使它看起来像int
。您可以将f
用于浮点数,将d
用于双打(或5.0
)。
关于后缀的主题,L
也有long
,但这对你的部门没有帮助,因为它也是一个整数类型。
5 // Int32
5L // Int64
5d // Double
5.0 // Double
5m // Decimal
5f // Single
答案 1 :(得分:5)
您需要使用浮点除法,而不是整数除法。您可以通过将其设为浮点数,或使用m
(将其指定为decimal
)在15后面来获得正确的结果:
decimal Test = (5 / 15.0) * 1185;
或
decimal Test = (5 / 15m) * 1185;
答案 2 :(得分:0)
5/15为0,因为您正在使用整数除法。 您可以尝试使用以下代码之一:
decimal test = (5m / 15) * 1185
decimal test = ((decimal)5 / 15) * 1185
decimal test = (5.0 / 15) * 1185
十进制值类型表示十进制数,范围从正数79,228,162,514,264,337,593,543,950,335到负数79,228,162,514,264,337,593,543,950,335。 Decimal类型不会消除舍入的需要,而是最小化由于舍入引起的错误。
答案 3 :(得分:0)
你也可以使用lambda表达式:
Func<decimal, decimal, decimal, decimal> exp = (x, y, z) => (x / y) * z;
Console.WriteLine(exp(5, 15, 1185));
输出: 394.999999
正如您预期的395,您需要使用Math.Round
Console.WriteLine(Math.Round(exp(5, 15, 1185), 1));
输出:395.0