需要以浮点格式以及指数格式显示值 如果该值大于或等于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));
请让我知道如何检查号码不包含小数值
答案 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
可能有更清洁的解决方案?!