sql server datetime to float ошибка - PullRequest
       29

sql server datetime to float ошибка

0 голосов
/ 07 июня 2018

Я пытаюсь вычислить рабочую смену из следующих значений, сравнивая значение datetime :: float с 1/3 следующим образом:

select t, 
    cast( ( cast( cast(t as datetime) as float) - floor(cast( cast(t as datetime)  as float ) ) ) * 3.0 as decimal(38,30) ) x,
    floor( 
        ( cast( cast(t as datetime) as float) - floor(cast( cast(t as datetime)  as float ) ) ) * 3.0 
        ) x1
from ( values ('2019-01-01 00:00:00.0') , ('2019-01-01 07:59:59.0') , 
              ('2019-01-01 08:00:00.0') , ('2019-01-01 15:59:59.0') , 
              ('2019-01-01 16:00:00.0') , ('2019-01-01 23:59:59.0') ) test_sample(t)

Но результат сбивает с толку:

2019-01-01 00:00:00.0   0E-30   0.0
2019-01-01 07:59:59.0   0.999965277776937010000000000000    0.0
2019-01-01 08:00:00.0   1.000000000007276000000000000000    1.0
2019-01-01 15:59:59.0   1.999965277784212900000000000000    1.0
2019-01-01 16:00:00.0   1.999999999992724100000000000000    1.0 <----- inconsistency, expected 2.0
2019-01-01 23:59:59.0   2.999965277769661100000000000000    2.0

Почему 16:00:00 отличается от других значений?Что я могу сделать, чтобы правильно обойти эту ошибку (не сравнивая даты с лотом case when с)?

...