Почему значения TimeSpan различаются между netcoreapp2.1 и netcoreapp3.1? - PullRequest
0 голосов
/ 02 апреля 2020

Я заметил, что некоторые из моих модульных тестов провалились, когда я перешел с netcoreapp2.1 на netcoreapp3.1.

Следующий код дает разные результаты:

using System;

namespace ConsoleApp12
{
    class Program
    {
        static void Main(string[] args)
    {
        var seconds = 0.81960;
        var timeSpan = TimeSpan.FromSeconds(seconds);

        Console.WriteLine($"seconds:{seconds}");
        Console.WriteLine($"timeSpan:{timeSpan}");
        Console.WriteLine($"timeSpan.Milliseconds:{timeSpan.Milliseconds}");
        Console.WriteLine($"timeSpan.Ticks:{timeSpan.Ticks}");
    }
    }
}

/*
core 2.1 and Framework 4.8 ROUNDS to nearest ms
seconds:0.8196
timeSpan:00:00:00.8200000
timeSpan.Milliseconds:820
timeSpan.Ticks:8200000
*/

/*
core 3.1 no longer rounds to nearest ms

seconds:0.8196
timeSpan:00:00:00.8196000
timeSpan.Milliseconds:819
timeSpan.Ticks:8196000
*/

Это не форматирование дисплея вещь, вы можете видеть это из значения тиков.

Почему они отличаются между tnet основными версиями?

1 Ответ

0 голосов
/ 14 апреля 2020

Между tnet ядром 2.1 и 3.1 (около конца 2019 г.) поведение System.TimeSpan изменилось , так что фабричных методов нет более длинный раунд с точностью до 1 мс.

Существует проблема GitHub об этом здесь .

Осторожно: текущая документация не была обновлена ​​для отражения изменений в поведении, вывод кода примера теперь неверно на сайте: System.TimeSpan.FromSeconds .

In. net core 2.1 и Net Framework, созданный TimeSpan, округляется до ближайших мс:

      FromSeconds          TimeSpan
      -----------          --------
            0.001          00:00:00.0010000
           0.0015          00:00:00.0020000
          12.3456          00:00:12.3460000
      123456.7898        1.10:17:36.7900000
  1234567898.7654    14288.23:31:38.7650000
                1          00:00:01
               60          00:01:00
             3600          01:00:00
            86400        1.00:00:00
        1801220.2       20.20:20:20.2000000 

In. net core 3.1 не округляется до ближайших мс (например, 12.3456):

      FromSeconds          TimeSpan
      -----------          --------
            0.001          00:00:00.0010000
           0.0015          00:00:00.0015000
          12.3456          00:00:12.3455999
      123456.7898        1.10:17:36.7898000
  1234567898.7654    14288.23:31:38.7654000
                1          00:00:01
               60          00:01:00
             3600          01:00:00
            86400        1.00:00:00
        1801220.2       20.20:20:20.2000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...