Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中以指数格式表示双值#_C# - Fatal编程技术网

C# 在C中以指数格式表示双值#

C# 在C中以指数格式表示双值#,c#,C#,需要以浮点格式和指数格式显示值 如果该值大于或等于0.01且小于或等于1000 以指数格式显示,否则以浮动格式显示 例如:3.230000000显示为3.23 0.00001显示为1E-05 但是我的代码的问题是,如果给定的数字是1,那么该数字将显示为1.00 if (dValue >= 0.01|| dValue <= 1000.0) return (string.Format("{0:0.##E+00}", dValue)); else

需要以浮点格式和指数格式显示值
如果该值大于或等于0.01且小于或等于1000 以指数格式显示,否则以浮动格式显示

例如:3.230000000显示为3.23 0.00001显示为1E-05

但是我的代码的问题是,如果给定的数字是1,那么该数字将显示为1.00

  if (dValue >= 0.01|| dValue <= 1000.0)
        return (string.Format("{0:0.##E+00}", dValue));
     else
        return (string.Format("{0:F2}", dValue));
如果(dValue>=0.01 | | dValue考虑简单使用


或用于获取整数部分,查看其是否与原始数字相同(需要考虑输出格式精度以与desider eps进行比较,在您的情况下可能为0.005)。

将数字四舍五入到小数点后两位和整数,并查看结果是否“足够接近”:

if(dValue>=0.01&&dValue替换最后一行

return (string.Format("{0:F2}", dValue))

时间太多了。:)

您将获得最大值为2位的值,如3.234

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Format(0.00001));
        Console.WriteLine(Format(1));
        Console.WriteLine(Format(3.2));
        Console.WriteLine(Format(3.22));
        Console.WriteLine(Format(3.256));
        Console.ReadLine();
    }

    static string Format(double dValue)
    {
        if (dValue >= 0.01 && dValue <= 1000.0)
        {
            int temp = (int)Math.Round(dValue * 100);
            if (temp % 100 == 0)
                return ((int)dValue).ToString();
            else if (temp % 10 == 0)
                return (string.Format("{0:F1}", dValue));
            else
                return (string.Format("{0:F2}", dValue));
        }
        else
            return (string.Format("{0:0.##E+00}", dValue));
    }
}

可能有更干净的解决方案?!

我想知道您的逻辑..>=0.01或@raghav55:请更正您的逻辑,因为它与书面文本不符。
return (string.Format("{0:0.##}", dValue))
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Format(0.00001));
        Console.WriteLine(Format(1));
        Console.WriteLine(Format(3.2));
        Console.WriteLine(Format(3.22));
        Console.WriteLine(Format(3.256));
        Console.ReadLine();
    }

    static string Format(double dValue)
    {
        if (dValue >= 0.01 && dValue <= 1000.0)
        {
            int temp = (int)Math.Round(dValue * 100);
            if (temp % 100 == 0)
                return ((int)dValue).ToString();
            else if (temp % 10 == 0)
                return (string.Format("{0:F1}", dValue));
            else
                return (string.Format("{0:F2}", dValue));
        }
        else
            return (string.Format("{0:0.##E+00}", dValue));
    }
}
1E-05
1
3,2
3,22
3,26