如果是小数,那么它就起作用了,但是对于较大的数字,它是错误的。下面是我的示例代码。
public void TestZZZZZZZZZ()
{
ulong val = ulong.MaxValue; // val = 18446744073709551615
string s = string.Format("{0}", val);
double d = Convert.ToDouble(s);
ulong result = ((ulong)d; // result = 0 <-- WRONG
Assert.AreEqual(val, result);
}一些测试数据的结果:
我有什么问题吗?请帮帮忙。
谢谢!
发布于 2015-10-29 07:44:41
这是因为long拥有64位数据,而double的重要精度只有53位。
发布于 2015-10-29 07:48:52
双精度为16位。所以测试你的号码16位数。
ulong val = 1234567890123456; // 16 digits
double d = val;
ulong result = (ulong)d;
Console.WriteLine(val == result); // prints true在此之后,你将失去精确性。
ulong val = 12345678901234567; // 17 digits
double d = val;
ulong result = (ulong)d;
Console.WriteLine(val == result); // prints false发布于 2015-10-29 07:50:51
https://stackoverflow.com/questions/33408410
复制相似问题