![]() |
| Riddle me this |
In just a few hours I take off for Hong Kong to take the kids to Disneyland and visit the city for a few days. I'm happy, so (while I don't condone the use of the Internet to solve all your problems) I thought I'd make a few other people happy, and make the visit to my site worthwhile :-)
I've used formulas according to Maths is Fun, and also demonstrated a few other SQL rounding functions you can find well documented here. That's right kids, documentation is your friend.
declare
lc_pi constant number := 3.141592;
-- triangle
ln_t_base number default 2;
ln_t_height number default 4;
-- square
ln_s_length number default 5;
-- circle
ln_c_radius number default 200;
-- ellipse
ln_e_width number default 3;
ln_e_height number default 2;
-- trapezoid / trapezium
ln_z_a number default 2;
ln_z_b number default 5;
ln_z_height number default 3;
-- sector
ln_r_radius number default 4;
ln_r_degrees number default 45;
ln_area number;
begin
-- triangle
ln_area := 0.5 * ln_t_base * ln_t_height;
dbms_output.put_line('Triangle: '||ln_area);
-- square
ln_area := POWER(ln_s_length, 2);
dbms_output.put_line('Square: '||ln_area);
-- circle
ln_area := lc_pi * POWER(ln_c_radius, 2);
dbms_output.put_line('Circle: '||ROUND(ln_area, -2));
-- ellipse
ln_area := lc_pi * ln_e_width * ln_e_height;
dbms_output.put_line('Ellipse: '||FLOOR(ln_area));
-- trapezium
ln_area := 0.5 * (ln_z_a + ln_z_b) * ln_z_height;
dbms_output.put_line('Trapezoid: '||CEIL(ln_area));
-- sector
ln_area := 1/2 * ln_r_radius**2 * ln_r_degrees / 180 / lc_pi;
dbms_output.put_line('Sector: '||ROUND(ln_area, 5));
end simple_calcs;
/
Triangle: 4
Square: 25
Circle: 125700
Ellipse: 18
Trapezoid: 11
Sector: 6.28319
PL/SQL procedure successfully completed.
See you on the other side of Hong Kong!

3 comments:
I must say, the need for these sorts of calculations have never come up in any project I've been involved in.
Pity.
I'd increase the accuracy of that PI constant. I'm pretty sure that errors would bubble up quite quickly with only six digits of precision. Just saying :)
Rather than the mysterious 57.2957795 I'd prefer to have seen something like (180 / lc_pi)
Tony - done
Jeff - I was about to go on holidays and used pi to the precision my memory recollects ;-)
I was thinking about the usability of these sorts of calculations and thought - well, I never thought I'd need to apply calculations that calculated various forms of decimal degrees & latitude/longitude, but I have. I guess you just have to be on the right project.
Luckily, I was about to find the valid calculations on a website that posted it in another language, and I was able to translate.
Post a Comment