.net windows微秒计算精度

.net windows微秒计算精度,.net,windows,datetime,.net,Windows,Datetime,我正在尝试将DateTime转换为Julian日期,并在Windows7下将其反转 public static double ToJulianDate(this DateTime dt) { return dt.ToOADate() + 2415018.5; } public static DateTime Julian2DT(this double julian) { return DateTime.FromOADate(julian -

我正在尝试将DateTime转换为Julian日期,并在Windows7下将其反转

    public static double ToJulianDate(this DateTime dt) {
        return dt.ToOADate() + 2415018.5;
    }
    public static DateTime Julian2DT(this double julian) {
        return DateTime.FromOADate(julian - 2415018.5);
    }
当我测试这两个函数时,如下所示

var dt = DateTime.Now;
dt.ToString("yyyy-MM-dd HH:mm:ss.ffffff").Dump();
dt.ToJulianDate().Julian2DT().ToString("yyyy-MM-dd HH:mm:ss.ffffff").Dump();
反转的朱利安日期始终与原始日期时间值相差数百微秒


我是否编写了错误的代码,或者windows时间系统中出现了微秒级的错误?

这是一个自然的结果,因为儒略日期被表示为
双精度(
)。例如,当前值约为2456348.78370906。小数点前有7位有效数字,双精度仅精确到“大约”15位。所以我们在小数部分有大约8位精度的小数位数。。。代表一天

现在1天/100000000=0.000864秒。所以我只希望准确度不到一毫秒


如果你不加上儒略日期的常数,事情看起来就更美好了——在这一点上,当前值只有41330左右,因此就一天中的时间而言,在精度值内有更多的“空间”。基本上,浮点值越大,绝对精度越差。(相邻值之间的差距变大。)

这是一个自然的结果,因为儒略日期被表示为一个
双精度的
。例如,当前值约为2456348.78370906。小数点前有7位有效数字,双精度仅精确到“大约”15位。所以我们在小数部分有大约8位精度的小数位数。。。代表一天

现在1天/100000000=0.000864秒。所以我只希望准确度不到一毫秒


如果你不加上儒略日期的常数,事情看起来就更美好了——在这一点上,当前值只有41330左右,因此就一天中的时间而言,在精度值内有更多的“空间”。基本上,浮点值越大,绝对精度越差。(相邻值之间的差距变大。)

谢谢您的回答。DateTime是一个奇怪的东西。FromOADate(dt.ToOADate())与dt.ToJulianDate().Julian2DT()完全相同,但与原始的dt.DateTime不同。FromOADate(dt.ToOADate())也存在微秒精度问题。感谢您的回答。DateTime是一个奇怪的东西。FromOADate(dt.ToOADate())与dt.ToJulianDate().Julian2DT()完全相同,但与原始的dt.DateTime不同。FromOADate(dt.ToOADate())也存在微秒精度问题。