有没有办法根据价值是否超过0.5或低于?

时间:2011-10-23 04:46:31

标签: c# .net math rounding floor

我正在尝试对我的值进行舍入,以便如果它是0.5或更高,则变为1,否则变为0。例如:

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

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

Math.Round(3.7,MidpointRounding.AwayFromZero);

http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx

在上面,我使用AwayFromZero进行舍入,因为默认值是Banker的舍入,所以如果分数是0.5,则舍入到最接近的偶数。因此3.5变为4(最近的偶数),但2.5变为2(最近的偶数)。因此,您可以选择上面显示的不同方法制作3.5到4和2.5到3。

答案 1 :(得分:3)

最简单的方法是在输入中加0.5,然后转换为int。

答案 2 :(得分:2)

我到了最后,所以我会说些不同的东西。您不使用0.51转为double!使用decimal s。拥有“确切”数字并不是double

启动这段代码并获得乐趣(请注意there is/was a "bug" in mono on numbers like 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
}

答案 3 :(得分:0)

舍入

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

舍弃

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