C# C语言中的截断
问题是,当我在程序中输入598.88美元的价格时,我应该得到354.52美元 数学:C# C语言中的截断,c#,math,C#,Math,问题是,当我在程序中输入598.88美元的价格时,我应该得到354.52美元 数学: 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; t
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();
我实际上得到了354.53,因为C向上取整而不是向下取整。
比如说,
如果我得到像519.998这样的答案,我希望它保持在519.99。
另一个例子,如果我得到的答案是930.755,我希望它保持在930.75
我研究了一些答案,但是Math.Truncate显然对我不起作用,使用*100/100技巧也不起作用。请记住,我是一名新生,所以,如果答案可以是noob-safe,那就太好了。谢谢。*100/100很好用,你可能用错了。请尝试以下操作:
598.88 - 8 = 590.88. 590.88 * 60% = 354.528
顺便说一句,Math.Truncate返回被截断的值,它不会像代码所暗示的那样更改输入参数。*100/100工作正常,您可能用错了。请尝试以下操作:
598.88 - 8 = 590.88. 590.88 * 60% = 354.528
作为旁注,Math.Truncate返回被截断的值,它不会像代码所暗示的那样更改输入参数。Math.Truncate与所有其他数学函数一样,在调用函数后返回值。该函数不会改变变量。实际上,这是不可能的双请参阅参考参数。所以你需要做:
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;
}
请注意,totalprice只有整数部分,因此如果值为45.985,则结果为45,因此需要乘以100,然后除以
这里的四舍五入是因为console.Write调用String.Format可以做到这一点。请参阅以获取写入函数调用 Math.Truncate与所有其他数学函数一样,在调用该函数后返回值。该函数不会改变变量。实际上,这是不可能的双请参阅参考参数。所以你需要做:
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;
}
请注意,totalprice只有整数部分,因此如果值为45.985,则结果为45,因此需要乘以100,然后除以
这里的四舍五入是因为console.Write调用String.Format可以做到这一点。请参阅以获取写入函数调用 模也起作用。很难说哪一个对安全性、可读性和性能更好
totalprice = Math.Truncate(totalprice);
模运算中的类似问题也适用。很难说哪一个对安全性、可读性和性能更好
totalprice = Math.Truncate(totalprice);
类似的问题在就像zerkms说的使用Math.Floor,也可以使用Decimal.TryParse来确保输入是正确的。Math.Truncate显然对你不起作用,因为它对参数没有任何作用,它会返回结果。就像zerkms说的使用Math.Floor,还可以使用Decimal.TryParse来确保输入是正确的。Math.Truncate显然不适用于您,因为它对参数没有任何作用,它返回结果。哇,这很有效,不难理解,但对我来说水平很好。谢谢你的帮助。哇,这很有效,不难理解,但对我来说水平不错。谢谢你的帮助。等等,我以为是这样的代码。关闭;被称为方法,它是一个动词。哦然后你从右边的主视图中创建一个方法/函数?我有很多东西要学:等等,我以为代码是这样的;被称为方法,它是一个动词。哦然后你从右边的主视图中创建一个方法/函数?我有很多东西要学: