2

需要以浮点格式和指数格式
显示值如果值大于或等于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));

请让我知道如何检查数字不包含十进制值

4

4 回答 4

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));

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

于 2012-08-24T07:37:21.103 回答
1

替换你的最后一行

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

return (string.Format("{0:0.##}", dValue))
于 2012-08-24T07:40:11.933 回答
0

考虑简单地使用G 格式

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

于 2012-08-24T07:36:22.743 回答
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

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

于 2012-08-24T08:02:27.757 回答