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技巧也不起作用。请记住,我是一个新学生,所以,如果一个答案可以是noob安全的,那就太好了。谢谢。
发布于 2012-11-02 08:57:38
* 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返回截断值,它不会像您的代码所暗示的那样更改输入参数。
发布于 2012-11-02 08:57:48
与所有其他数学函数一样,Math.Truncate在函数被调用后返回值。这个函数不会改变你的变量。实际上,这对于doubles是不可能的(请参见ref参数)。所以你需要做的是:
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/以获取您的编写函数调用。
发布于 2017-05-16 04:11:49
Modulo也可以工作。(很难说哪一个在安全性、可读性和性能方面更好。)
Decimal totalprice = (sum - 8m) * 0.60m; // Discount $8.00 and then 40%.
totalprice -= totalprice % 0.01; // Truncate to two decimal places.https://stackoverflow.com/questions/13187686
复制相似问题