从String转换Double

时间:2015-06-22 14:17:35

标签: asp.net vb.net visual-studio-2012 converter

将字符串转换为浮动时,转换器会产生错误的结果。

?Global.System.Convert.ToDouble("635705821821928755").ToString("0")
"635705821821929000"

?Global.System.Convert.ToSingle("635705821821928755").ToString("0")
"635705800000000000"

我正在ASP.Net网页上使用VB.Net Visual Studio 2012,Framework 4。

有没有解决方案将巨大的数字从字符串转换为浮动?

2 个答案:

答案 0 :(得分:2)

结果没有错,它只有比你预期的更低的精度。浮点数的设计精度有限,而且您无法获得比其限制更精确的结果。

您可以使用Decimal来获得更高的精确度。在这种情况下,您使用的数字就足够了:

?Convert.ToDecimal("635705821821928755").ToString("0")
"635705821821928755"

double的精度为15-16位,Decimal的精度为28-29位。

注意:严格来说,Decimal不是浮点数,而是固定精度数。它是一个带小数的整数,所以例如12.345的数字存储为12345 * 10 -3

答案 1 :(得分:1)

您应该使用System.Numerics中的BigInteger结构。