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

C# 如何在不包含指数表示法的情况下获取浮点值,c#,floating-point,tostring,C#,Floating Point,Tostring,在C#中,是否可以在浮点上执行ToString并在不使用指数的情况下获取值 例如,考虑以下内容: float dummy; dummy = 0.000006F; Console.WriteLine(dummy.ToString()); 这给出了输出 6E-06 然而,我是什么 0.000006 我能找到的最接近的方法是使用“F”限定符,但是我需要指定小数位数,否则该值将被舍入 实际上有没有一种方法可以自动完成这项工作,或者我需要做大量的时髦逻辑来修剪零或计算出所需的小数位数 谢谢, 理

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

例如,考虑以下内容:

float dummy;

dummy = 0.000006F;

Console.WriteLine(dummy.ToString());
这给出了输出

6E-06
然而,我是什么

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

实际上有没有一种方法可以自动完成这项工作,或者我需要做大量的时髦逻辑来修剪零或计算出所需的小数位数

谢谢,
理查德·莫斯

Console.WriteLine(dummy.ToString("N5"));
其中5是小数位数

试试这个

Console.WriteLine(dummy.ToString("F"));
还可以指定小数位数。例如F5、F3等

此外,还可以检查自定义格式说明符

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

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

decimal dummy;
dummy = 0.000006M;
十进制类型在表示十进制数方面比
float
double
更精确,但性能不如前者。有关更多信息,请参阅

float dummy = 0.000006F;
Console.WriteLine(dummy.ToString("0." + new string('#', 60)));
如果您经常这样做,那么将格式字符串存储在某个地方的
静态
字段/属性中并重新使用它是有意义的,而不是每次都构造一个新的
字符串

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

// ...

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

是的,如前所述,我已经试过了。但是,我需要指定我不一定知道的小数位数(除非我遗漏了其他东西;)-我有点惊讶,我似乎无法做到这一点,除非使用我的用户不想要的E符号。哦,对不起,我必须仔细阅读。因此,如果要显示浮点数,应声明要显示的最大十进制精度。顺便说一句,float类型不提供高精度(~10^(-39)),您可以选择足够大的小数位数。我也尝试过这种方法,即F10,但“副作用”是0在6之后继续。我本来希望避免这种情况,但如果这是我唯一能去掉多余零的方法,我想。似乎是这样。。。笨重!也许自定义格式会对您有所帮助。试试这个:Console.WriteLine(dummy.ToString(“0.#########”);它将最多打印9位小数,并删除尾随zeros@Richard您是否考虑过改用十进制类型?听起来这可能更适合你想要的。感谢你的回复,这也是我已经尝试过的,并且遇到了与F限定符相同的问题,因为我需要明确指定一个我不知道的精度。
private static readonly string _allFloatDigits = "0." + new string('#', 60);

// ...

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