Eric Lippert 写了一篇关于 DateTime 的文章。Jon Skeet 评论了他的文章
只要每个人都知道,我对 DateTime 的精度没有太大的问题。精度,而不是准确度
他这是什么意思?
处理 DateTime 精度问题与准确性问题是什么意思?
他在那篇文章中使用了错误的术语准确性。准确度差确实意味着系统偏差,例如如果您的计算机时钟关闭一分钟会发生什么。Lippert 的文章真正说明的是错误的精度。
换句话说,该DateTime
结构非常精确,因为它能够表示只有 100 纳秒的差异。但是,您将获得的值 DateTime.Now
仅精确到 16 毫秒内。但是您给出的数字仍将DateTime
具有能够表示的完整精度。这会产生一个陷阱,因为很容易假设DateTime.Now
返回的值具有DateTime
结构的完整精度,而不是花时间找出DateTime.Now
获取其值的源提供的精度。
DateTime
,作为一个简单的数据结构,没有内在的准确性,所以谈论它并没有真正的意义。(一公斤的准确度是多少?)最好谈谈系统时钟的准确度。(例如,该比例有多准确?)但这可能因每台计算机而异,并且与 .NET 中的数据结构没有任何关系。
具有如此高的精度所带来的问题当然是很容易假设给定值与它一样精确。但这根本没有保证!我可以用双精度浮点数将我的身高表示为 1.799992352094 米;虽然精确到万亿分之一米,但它只能精确到百分之一米左右,因为我没有一个设备可以实际测量我的高度到万亿分之一米,甚至千分之一米。这里的精确度比精确度高得多。