在C#中,是否可以在float上执行ToString并在不使用指数的情况下获取值?
例如,请考虑以下事项:
float dummy;
dummy = 0.000006F;
Console.WriteLine(dummy.ToString());
这给出了输出
6E-06
然而,我的是
0.000006
我能找到的最接近的是使用“F”限定符,但是我需要指定小数位数,否则值将被舍入。
实际上是否有一种自动执行此操作的方法,或者我需要加载一些时髦的逻辑来修剪零或计算出所需的小数位数。
感谢;
理查德莫斯
答案 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;
十进制类型在表示十进制数时比float
或double
更准确,但效果不佳。有关详细信息,请参阅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));