fea*_*net 8 c# datetime rounding
DateTime.Now.AddMilliseconds(1.5); // adds 2 milliseconds
Run Code Online (Sandbox Code Playgroud)
他们到底在想什么呢?如果它不处理小数值,那么创建一个采用double的方法会让我感到非常糟糕.他们为什么不通过调用AddTicks实现这一点并正确处理分数?或者至少采用一个int,这样对调用者来说是透明的吗?
我猜他们必须有一个很好的理由让他们以这种方式实现它,但我想不出它会是什么.有人可以提供任何见解吗?
编辑:只是为了进一步强调这一点:
AddSeconds(1.5); // Adds 1500 milliseconds
Run Code Online (Sandbox Code Playgroud)
这是一种妥协,并非完全不合理。传递的参数必须进行舍入以处理日期时间的分辨率。舍入到刻度(100 纳秒)的精度是一个问题。Double 没有足够的有效数字来跨越所有可能的日期范围。10000 年 x 365 x 24 x 3600 x 1000 x 10000 = 3E18,double 只有 15 位有效数字。四舍五入到毫秒没有问题,3E14 就足够了(几率是多少?)
解决方法很简单,只需使用 AddTicks(1.5 * 10000)。
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |