ErrorMadness Ответов: 1

Sql FLOOR() отображает различные выходные данные


Когда я использую этот код и значение Latehrs1 из базы данных равно 0.58, он дает значение 57.
SELECT i.id, i.entrydate, i.in1, i.out1, i.in2, i.out2, i.totalhrsworked,  
(FLOOR(latehrs1)*60)+FLOOR(((latehrs1)-FLOOR(latehrs1))*100) AS latehrs1,  
(FLOOR(latehrs2)*60)+FLOOR(((latehrs2)-FLOOR(latehrs2))*100) AS latehrs2,  
i.isUt, i.`daycount`, i.ishalfday,  
i.`break`  FROM temp_io5 i WHERE id=712;


С другой стороны, когда я устанавливаю значение для latehrs1, оно дает мне выход 58. Почему это так? Как же это случилось?

SET @latehrs1=0.58;
SELECT (FLOOR(@latehrs1)*60)+FLOOR(((@latehrs1)-FLOOR(@latehrs1))*100) AS latehrs


Что я уже пробовал:

SET @latehrs1=0.58;
SELECT (FLOOR(@latehrs1)*60)+FLOOR(((@latehrs1)-FLOOR(@latehrs1))*100) AS latehrs

1 Ответов

Рейтинг:
8

OriginalGriff

Без доступа к вашей базе данных, я бы предположил, что все сводится к типам данных.
Если я создам БД с двумя столбцами:

USE [Testing]
GO

/****** Object:  Table [dbo].[Table_5]    Script Date: 10/01/2019 07:07:08 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Table_5](
	[latehrs1] [float] NOT NULL,
	[latehrs2] [decimal](5, 2) NOT NULL
) ON [PRIMARY]

GO
И заполните одну строку 0,58 в обоих столбцах.
После выполнения этого запроса:
SELECT
   latehrs1,
   latehrs2,
   (FLOOR(latehrs1)*60)+FLOOR(((latehrs1)-FLOOR(latehrs1))*100) AS latehrs1,  
   (FLOOR(latehrs2)*60)+FLOOR(((latehrs2)-FLOOR(latehrs2))*100) AS latehrs2
FROM Table_5
Дай мне то, что ты видишь.:
latehrs1  latehrs2  latehrs1  latehrs2
    0.58      0.58        57        58


ErrorMadness

Спасибо Вам, OriginalGriff! Это решило мою проблему! Я работаю над проектом системы расчета заработной платы, и это моя единственная проблема в подсчете выходных данных системы к ручному расчету заработной платы.

OriginalGriff

Всегда пожалуйста!