如何在不包含指数表示法的情况下获得浮点值

时间:2010-09-21 06:58:12

标签: c# floating-point tostring

在C#中,是否可以在float上执行ToString并在不使用指数的情况下获取值?

例如,请考虑以下事项:

float dummy;

dummy = 0.000006F;

Console.WriteLine(dummy.ToString());

这给出了输出

6E-06

然而,我的是

0.000006

我能找到的最接近的是使用“F”限定符,但是我需要指定小数位数,否则值将被舍入。

实际上是否有一种自动执行此操作的方法,或者我需要加载一些时髦的逻辑来修剪零或计算出所需的小数位数。

感谢;
理查德莫斯

5 个答案:

答案 0 :(得分:18)

试试这个

Console.WriteLine(dummy.ToString("F"));

您还可以指定小数位数。例如F5,F3等

另外,您可以检查自定义格式说明符

Console.WriteLine(dummy.ToString("0.#########"));

答案 1 :(得分:3)

string dum = string.Format("{0:f99}",dummy).TrimEnd('0');
if (dum.EndsWith(",")) dum = dum.Remove(dum.Length - 1);

答案 2 :(得分:2)

如果没有进一步的背景信息,很难说 - 但听起来你想要十进制语义。那么为什么不使用decimal类型呢?

decimal dummy;
dummy = 0.000006M;

十进制类型在表示十进制数时比floatdouble更准确,但效果不佳。有关详细信息,请参阅here

答案 3 :(得分:1)

Console.WriteLine(dummy.ToString("N5"));

其中5位小数位数

答案 4 :(得分:0)

float dummy = 0.000006F;
Console.WriteLine(dummy.ToString("0." + new string('#', 60)));

如果您要做很​​多事情,那么将格式字符串存储在某个地方的static字段/属性并重新使用它是有意义的,而不是每次构建一个新的string

private static readonly string _allFloatDigits = "0." + new string('#', 60);

// ...

float dummy = 0.000006F;
Console.WriteLine(dummy.ToString(_allFloatDigits));