浮点数转字符串格式说明符

36

我有一些浮点数值想要转换为字符串,我希望在转换时保持同样的格式,例如 999.0000(float) -> 999.0000(String)。我的问题是当值在十进制点后包含任意数量的零时,就像上面的例子一样,它们在转换为字符串时会被去除,所以我实际上得到的结果是 999。

我查看了在MSDN上的 toString() 方法的格式说明符,RoundTrip('R')说明符看起来可以产生我想要的结果,但它仅支持单精度、双精度和大整型变量。是否有类似于这种浮点变量的格式说明符?或者将它们转换为双精度变量是否更容易?

更新:只是为了澄清,我想要保留尾随的零是因为我正在比较小数位数,即我正在比较两个值之间小数点后的数字数量。例如,1.00和1.00000在小数点后有不同数量的数字。我知道这是一个奇怪的请求,这是为了工作需要,要求来自高层。

更新 2-3-11:

我想得太复杂了,我正在从文本文件中读取数字,然后将它们解析为浮点数,我将修改程序以检查字符串值是小数还是整数。对于浪费您的时间,我很抱歉,尽管这很有启发性。


小数点后有多少位?如果您想保持动态,假设值是正确的浮点数,则使用.ToString("G")。 - Kris Ivanov
数字将会有所变化,为了简单起见,我会说小数点后的数字范围可能在1到5之间。 - kingrichard2005
".ToString("G")" 最适合变量范围。 - Kris Ivanov
尝试使用“G”说明符,但当遇到像999.0这样的数字时,它返回999。我想保留尾随的零,作为字符串,我希望它是“999.0”。 - kingrichard2005
kingrichard2005,对于float/System.Single类型来说,999.0000和999.0之间没有区别(它们是相同的);它们只是值,完全不受格式化的影响。这个999.0000是从哪里来的?你在哪里看到它了? - Dan Tao
1
如果您想要文本文件中的字符串保持原样,而且不需要进行任何计算,为什么不直接将值作为字符串读取,而不是将其解析为浮点数?如果您确实需要这些值,请对它们进行解析,但同时保留原始字符串。无论哪种方式,您都可以查看我的帖子,以便更轻松地使用格式参数对ToString()方法进行数字格式化。 - sprite
4个回答

73

使用 ToString() 函数并按照这个格式:

12345.678901.ToString("0.0000"); // outputs 12345.6789
12345.0.ToString("0.0000"); // outputs 12345.0000

在格式的末尾放置足够多的零。


嗨,Aliostad,这个问题是我想要字符串的格式与数字的格式完全一致。对于你的第二个例子,我希望它是一个字符串"12345.0",而不是"12345.0000"。 - kingrichard2005
@kingrichard2005- 有什么信息可以告诉你浮点数是12345.0还是12345.0000?它们在浮点数中是等价的。 - Joel Etherton
我正在从一个txt文件中读取这些文件。也许更好的选择是确定作为字符串读入的数字是否为十进制数。 - kingrichard2005
问题在于这会限制精度。 - cdiggins
在我的情况下,使用这种方法时,76788.1953的值被四舍五入为76788.2000。因此,这种方法会导致精度损失。我按照@Dan Tao的回答使用了ToString("R"),然后获得了精确的精度。 - Kartik Javali

37

首先,正如Etienne所说,C#中的float实际上就是Single。它只是该数据类型的C#关键字。

因此,您绝对可以这样做:

float f = 13.5f;
string s = f.ToString("R");

其次,你已经几次提到数字的“格式”;数字没有格式,它们只有字符串有格式。这让我想知道:你所拥有的这个具有格式但不是字符串的东西是什么?我能想到最接近的应该是 decimal,它确实保持自己的精度;然而,在这种情况下,仅调用 decimal.ToString 应该会产生你想要的效果。

将一些示例代码包含在内如何?这样我们就可以看到你正在做什么,以及为什么它不能达到你想要的目的?


3
科学领域通常会区分“1.01e5”和“1.0100e5”,因为末尾零的数量影响有效数字的位数,从而表达了测量结果的精度。 - Clément
我只希望float能找到一个人 - Cool guy

20
您可以向 ToString 方法传递格式字符串,如下所示:
ToString("N4"); // 4 decimal points Number
如果你想查看更多的修改器,请查看MSDN - Standard Numeric Format Strings

5
在C#中,floatSystem.Single的别名(有点像intSystem.Int32的别名)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接