基于值是大于0.5还是小于0.5,有没有一种方式进行向下取整/向上取整?

3

我正在尝试将我的值四舍五入,如果它大于或等于0.5,则变为1,否则变为0。例如:

3.7 -> 4;
1.3 -> 1;
2.5 -> 3;
...

有任何想法吗?

2
Math.Round不起作用还是有你没有展示的特定情况? - Jesus Ramos
谢谢,我现在尝试了一下,似乎可以工作。我之前一直在尝试这里建议的方法,所以我认为我需要其他东西。如果你愿意,把它发表为答案,我会将其标记为答案。 - Joan Venge
你可以直接接受manojlds的回答,因为他已经发了我要发的内容。 - Jesus Ramos
1
你可以在 https://dev59.com/bHVD5IYBdhLWcg3wXamd#580252 找到关于 C# 舍入的所有信息。 - paxdiablo
4个回答

8
Math.Round(3.7,MidpointRounding.AwayFromZero);

http://msdn.microsoft.com/zh-cn/library/system.midpointrounding.aspx

上述代码中使用了 AwayFromZero 进行舍入,因为默认的是银行家舍入,如果小数部分为 0.5,则会被舍入到最近的偶数。所以 3.5 舍入后变成 4(最近的偶数),但是 2.5 舍入后变成 2(最近的偶数)。因此,您可以像上面演示的那样选择不同的方法来将 3.5 舍入为 4,而将 2.5 舍入为 3。


谢谢,为什么3.5会变成4而2.5却变成2?我应该像你展示的那样使用AwayFromZero吗?我现在正在阅读你发布的链接。 - Joan Venge
@JoanVenge - 就像我说的,银行家舍入是默认值,也是它的工作方式。 它将0.5舍入到最近的偶数。所以3.5变成4(最接近的偶数),而2.5变成2(最接近的偶数)。这是默认设置。因此,当您使用Math.Round时,如果需要另外一种舍入方式,您将需要使用AwayFromZero。 - manojlds

3
最简单的方法是将输入加上0.5,然后转换为整数。

2
我最后到达,所以我会讲一些不同的东西。您可以通过不使用“double”而将“0.5”四舍五入为“1”!使用“decimal”。 “double”不适合具有“精确”数字。启动此代码片段并享受乐趣(请注意,mono上存在/存在类似于0.49999999999999994的数字的“错误”,因此要在ideone上运行它,我不得不稍微修改它来尝试四舍五入1.5:http://ideone.com/57XAYV
public static void Main()
{
    double d = 1.0;
    d -= 0.3;
    d -= 0.2;

    Console.WriteLine("Standard formatting: {0}", d); // 0.5
    Console.WriteLine("Internal Representation: {0:r}", d); // 0.49999999999999994
    Console.WriteLine("Console WriteLine 0 decimals: {0:0}", d); // 1
    Console.WriteLine("0 decimals Math.Round: {0}", Math.Round(d, MidpointRounding.AwayFromZero)); // 0
    Console.WriteLine("15 decimals then 0 decimals Math.Round: {0}", Math.Round(Math.Round(d, 15, MidpointRounding.AwayFromZero), MidpointRounding.AwayFromZero)); // 1
}

1

总结

Math.Round(3.5, 0, MidpointRounding.AwayFromZero) -> 4

向下取整

Math.Round(3.5, 0, MidpointRounding.ToEven) -> 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接