C# C语言中的截断

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

问题是,当我在程序中输入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;
    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显然不适用于您,因为它对参数没有任何作用,它返回结果。哇,这很有效,不难理解,但对我来说水平很好。谢谢你的帮助。哇,这很有效,不难理解,但对我来说水平不错。谢谢你的帮助。等等,我以为是这样的代码。关闭;被称为方法,它是一个动词。哦然后你从右边的主视图中创建一个方法/函数?我有很多东西要学:等等,我以为代码是这样的;被称为方法,它是一个动词。哦然后你从右边的主视图中创建一个方法/函数?我有很多东西要学: