Subject | Re: Hourly rate |
---|---|

Author | Adam |

Post date | 2005-10-22T06:48:12Z |

> Hi Alexandre:Arnaldo,

>

> The problem is this:

> You wrote:

>

> x = 2.22 hour = 2 hour and 13 minutes

>

> HOW do You know that 2.22 = 2 h and 13 min??

>

> The others things are ALREADY solved, what I don't know is how

> to traslate 2.22 in 02:13

>

> eg: cast( as time )?

>

> Thanks

>

> Arnaldo

>

You really made it sound like you were asking a maths question rather

than anything remotely related to FB (which I why others thought you

were joking). It is strictly a maths question, the only Firebird

related part to it is perhaps how to use the floor function and how to

cast the result to an integer.

There is a UDF called IB_UDF. There are a function inside it that is

of interest. FLOOR will

Assuming X = 2.22 etc.

Hours = FLOOR(X); -- which = 2

Y = (X - FLOOR(X)); -- which = 2.22-2 = 0.22

Mins = Y * 60;

Mins may not be a whole number (there may be seconds which are also

expressed in decimals.

CREATE PROCEDURE SP_DECIMALHOURSTOHRMIN

(

DECIMALHOURS NUMERIC(18,4)

)

RETURNS

(

HOURS INTEGER

MINS INTEGER

)

AS

BEGIN

HOURS = CAST(FLOOR(:DECIMALHOURS) AS INTEGER);

MINS = CAST(60 * (:DECIMALHOURS - FLOOR(:DECIMALHOURS)) AS INTEGER);

SUSPEND; -- if you will be using select syntax

END

^

SELECT HOURS,MINS

FROM SP_DECIMALHOURSTOHRMIN(2.22);

Simple. In fact I think you do not have to even use floor at all, just

casting a float to an integer will do the same thing.

Adam