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

时间:2012-08-24 07:25:59

标签: c#

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

例如: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));

请让我知道如何检查号码不包含小数值

4 个答案:

答案 0 :(得分:2)

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

if (dValue >= 0.01 && dValue <= 1000.0)
{
    if (Math.Abs(Math.Round(dValue, 2) - Math.Round(dValue, 0)) < 0.005) {
        return string.Format("{0:F0}", dValue);
    else
        return string.Format("{0:F2}", dValue);
}
else return (string.Format("{0:0.##E+00}", dValue));

这里需要注意的是(与浮点数一样),两个舍入结果之间的比较应该是相等比较。

答案 1 :(得分:1)

替换你的最后一行

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

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

答案 2 :(得分:0)

只考虑使用G format

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

答案 3 :(得分:0)

太多时间了。 :)

您将获得最多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));
    }
}

给出

1E-05
1
3,2
3,22
3,26

可能有更清洁的解决方案?!