C# Mod返回奇异值

C# Mod返回奇异值,c#,C#,我是编程新手,正在尝试编写一个程序,计算出一个百分比,然后根据结果显示答案的格式 if(percent % 1 == 0.0) { sw.Write(" {0}%", (int)percent); } else { sw.Write((" {0:f1}%", percent); 本例中的百分比值为11、14、12、6和4。在除14以外的所有情况下,它显示为整数,但对于14,它显示为14.0。如果我看百分比,数字将出现11.0 12.0等,但14是14.000000000000004,因

我是编程新手,正在尝试编写一个程序,计算出一个百分比,然后根据结果显示答案的格式

if(percent % 1 == 0.0)
{
    sw.Write(" {0}%", (int)percent);
}
else
{
sw.Write((" {0:f1}%", percent);

本例中的百分比值为11、14、12、6和4。在除14以外的所有情况下,它显示为整数,但对于14,它显示为14.0。如果我看百分比,数字将出现11.0 12.0等,但14是14.000000000000004,因此显示不正确。这是一个怪癖还是我编程不正确?向巴里致意

如果您在固定小数点后,请尝试以下方法:

sw.Write(string.Format("{0:0.00}", percent)); 

不应使用
运算符==
比较浮点值

我发布了一些代码来说明应该如何做

编辑

一个完整的例子:

class Program
{
    static double epsilon = 0.000001;

    static bool DoubleEquals(double value1, double value2)
    {
        return Math.Abs(value1 - value2) < epsilon;
    }

    static void Print(double percent, TextWriter sw)
    {
        if (DoubleEquals(percent % 1, .0))
        {
            sw.Write(" {0}%", (int)percent);
        }
        else
        {
            sw.Write(" {0:f1}%", percent);
        }
    }

    public static void Main(string[] args)
    {
        Print(11.0, Console.Out);
        Print(14.000000000000004, Console.Out);
        Print(12.0, Console.Out);
        Print(6.0, Console.Out);
        Print(4.0, Console.Out);

        Console.Write("Press any key to continue . . . ");
        Console.ReadKey(true);
    }
类程序
{
静态双ε=0.000001;
静态布尔DoubleEquals(双值1,双值2)
{
返回Math.Abs(value1-value2)

当然,您必须将
epsilon
调整到足够小的值。

很抱歉在编辑器中遇到问题。我尝试了该代码,但它对我无效。当我使用(!Double.Equals(percent,0))时,它始终会给出一个整数,即使它应该是小数,当使用(Double.Equals(percent,0))时,它也会给出一个整数它总是会出现一个小数点。也许作为一个初学者,我期望太多了。谢谢。我确实把它放进去了,当然它工作得很好。我可以看到,在我能够像这样编程之前,我还有很长的路要走。作为一个初学者,似乎做这类事情应该很简单,但显然它需要比我更多的知识还没有。关于BarryThank你,这将是非常有用的,但我似乎在让数字以我希望的方式进行比较,而不是目前的最终输出时遇到了问题。关于BarryThank,这似乎只发生在百分比是确定的数字时-7、14或28,而不是21。所有其他数字都是正确的。现在我真的是这样了困惑!BarryWhat type是percent?您是如何获取值的?如果percent的类型是int或double,您在这里的示例不会产生所描述的问题。什么类型是percent?您可以修改示例以实际演示该问题吗?percent是double,来自一个公式。公式是numodgs/totalDogs*100.numOfDogs是一个双数组(最初是一个整数数组,但没有区别),totalDogs是一个双数组。>>percent=numOfDogs[i]/totalDogs*100;>>if(percent%1==0.0)/(DoubleEquals(percent%1.0))>{>>sw.Write(“{0}%,(int)percent);>}>>其他>>{>>sw.Write(“{0:f1}%”,百分比);>>>>>>行=”;>>sw.WriteLine(行);