2012-08-22 81 views
4

我有一个双倍的文本表示,并且想知道是否可以将它往返翻回。如果我也想接受任何种类的数字式输入,我怎么知道这一点?或者,我怎么知道在使用Double.Parse解析双字符串时是否会丢失任何精度?或者,我如何ToString一个双重匹配与另一个双字符串相同的格式?任何这些问题的答案都是我想的解决方案。如何知道双弦是否安全?

+0

你有什么已经尝试过?一些测试可能? –

+0

你是什么意思“匹配相同的格式作为另一个双串”?你有这种格式指定,还是不? I.E.我现在在此向您提供这个字符串:“123sd344 + 334.ere”,我声称这是一个格式良好的双数字。你怎么猜这是什么格式? – quetzalcoatl

+0

嗯。我正在考虑限制有效数字和指数的数量,所以我可以保证,任何以#####格式编写的数字都是安全的。 –

回答

4

使用R格式说明转换的doublestring

myDouble.ToString("R") 

The Round-trip ("R") Format Specifier MSDN上。

往返(“R”)格式说明符保证转换为字符串的数值将被解析回相同的数值。该格式仅支持Single,Double和BigInteger类型。

(重点煤矿)

+0

这适用于double - > string - > double,但对string - > double - > string没有帮助。 – JohnB

+0

@JohnB - 它完全依赖于'double'的原始表示形式。人们必须假设始终如一的表示。 – Oded

+2

“R”转换器不可靠。有关更多信息,请参阅http://stackoverflow.com/questions/24299692/why-is-a-round-trip-conversion-via-a-string-not-safe-for-a-double?rq=1。 – supercat

-1

当然,这不是几个原因往返安全:

  1. 解析字符串时,双,因为双不包含有关其视觉表现的任何信息的数字格式丢失。

  2. 虽然字符串表示法通常是十进制的,但double是二进制浮点数。所以0.1的双精度不会精确到0.1,因为0.1的二进制表示没有有限的数字。您可以解析为十进制而不是双精度,以避免此问题。

我会建议建立一个存储数字和字符串表示的结构。

相关问题