string input = Console.ReadLine();
decimal sum = Convert.ToDecimal(input);
if (sum >= (decimal)500.01)
{
//40% and 8 dollars off shipping costs are taken off total amount
decimal totalprice;
totalprice = (sum - 8) * .60m;
Math.Truncate(totalprice);
Console.WriteLine("Your final cost is:${0:0.00}", totalprice);
Console.Read();
问题是,当我在我的程序中输入598.88美元的价格时,我应该得到354.52。
数学:
598.88 - 8 = 590.88. 590.88 * 60% = 354.528
我实际上得到354.53
因为C#向上而不是向下。
例如,
如果我得到519.998
这样的答案,我希望它能够留在519.99
。
另一个例子,如果我得到像930.755
这样的答案,我希望它留在930.75
。
我查了一些答案,但Math.Truncate
显然不适合我,使用*100 / 100
技巧也不起作用。请记住,我是一名新生,所以,如果答案可能是安全的,那就太好了。感谢。
答案 0 :(得分:2)
* 100 / 100
工作正常,您可能错误地使用了它。请尝试以下方法:
decimal totalprice = TruncateToTwoDigits((sum - 8) * .60m);
Console.WriteLine("Your final cost is:${0:0.00}", totalprice);
...
private static decimal TruncateToTwoDigits(decimal Value)
{
int adjusted = (int)Math.Truncate(Value * 100m);
return adjusted / 100m;
}
作为旁注,Math.Truncate
返回截断的值,它不会像您的代码所暗示的那样更改输入参数。
答案 1 :(得分:2)
Math.Truncate像所有其他Math函数一样,在调用函数后返回值。该函数不会改变您的变量。实际上双打是不可能的(请参阅参数参数)。所以你需要这样做:
totalprice = Math.Truncate(totalprice);
请注意,totalprice只有整数部分,所以如果值是45.985,结果是45,所以你需要乘以100然后除。 http://msdn.microsoft.com/en-us/library/7d101hyf.aspx
你到达那里的四舍五入是因为console.Write会调用String.Format。请参阅http://www.csharp-examples.net/string-format-double/以获取写函数调用。
答案 2 :(得分:0)
Modulo也有效。 (很难说哪个更适合安全性,可读性和性能。)
Decimal totalprice = (sum - 8m) * 0.60m; // Discount $8.00 and then 40%.
totalprice -= totalprice % 0.01; // Truncate to two decimal places.
处的类似问题