首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中截断

问在C#中截断
EN

Stack Overflow用户
提问于 2012-11-02 08:43:22
回答 3查看 1.1K关注 0票数 1
代码语言:javascript
复制
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美元。

数学:

代码语言:javascript
复制
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安全的,那就太好了。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-02 08:57:38

* 100 / 100运行正常,您可能用错了它。在下面尝试一下:

代码语言:javascript
复制
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返回截断值,它不会像您的代码所暗示的那样更改输入参数。

票数 2
EN

Stack Overflow用户

发布于 2012-11-02 08:57:48

与所有其他数学函数一样,Math.Truncate在函数被调用后返回值。这个函数不会改变你的变量。实际上,这对于doubles是不可能的(请参见ref参数)。所以你需要做的是:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-05-16 04:11:49

Modulo也可以工作。(很难说哪一个在安全性、可读性和性能方面更好。)

代码语言:javascript
复制
Decimal totalprice = (sum - 8m) * 0.60m;  // Discount $8.00 and then 40%.
totalprice -= totalprice % 0.01;  // Truncate to two decimal places.

Truncate Two decimal places without rounding上的类似问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13187686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档