从字符串转换双精度
Convert Double from String
将字符串转换为浮点数时,转换器生成了错误的结果。
?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。
是否有将大数字从字符串转换为浮点数的解决方案?
您应该使用 System.Numerics 中的 BigInteger 结构。
结果没有错,只是精度低于您的预期。浮点数在设计上具有有限的精度,您根本无法期望获得比其限制更精确的结果。
您可以使用 Decimal
来获得更高的精度。在这种情况下,您使用的号码就足够了:
?Convert.ToDecimal("635705821821928755").ToString("0")
"635705821821928755"
一个double
的精度为15-16位,一个Decimal
的精度为28-29位。
注意:Decimal
严格来说不是浮点数,而是定精度数。它是一个带小数位的整数,例如,数字 12.345 存储为 12345 * 10-3
将字符串转换为浮点数时,转换器生成了错误的结果。
?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。
是否有将大数字从字符串转换为浮点数的解决方案?
您应该使用 System.Numerics 中的 BigInteger 结构。
结果没有错,只是精度低于您的预期。浮点数在设计上具有有限的精度,您根本无法期望获得比其限制更精确的结果。
您可以使用 Decimal
来获得更高的精度。在这种情况下,您使用的号码就足够了:
?Convert.ToDecimal("635705821821928755").ToString("0")
"635705821821928755"
一个double
的精度为15-16位,一个Decimal
的精度为28-29位。
注意:Decimal
严格来说不是浮点数,而是定精度数。它是一个带小数位的整数,例如,数字 12.345 存储为 12345 * 10-3