Can somebody explain how I can get the value I want:
h=44.10
D1# = INT(h * 100): PRINT D1#
D2 = 100 * h: PRINT D2
BASIC Answer for D1# is 4409 and not 4410
D2 answer is 4410
How can I have 4410 with INT fonction?
(h can be 44.1035 for instance. I need that INT to cut at that point the 2 last digits).
Thanks for help
INT SURPRISES
- burger2227
- Veteran
- Posts: 2466
- Joined: Mon Aug 21, 2006 12:40 am
- Location: Pittsburgh, PA
Easiest way is to use CINT instead.
INT can never reach the multiplication number because it always rounds down. CINT, Closest Integer, rounds up or down.
Formulas for a range of numbers where max is highest number and min is lowest:
AS you can see, CINT formula is simpler.
Ted
INT can never reach the multiplication number because it always rounds down. CINT, Closest Integer, rounds up or down.
Formulas for a range of numbers where max is highest number and min is lowest:
Code: Select all
INT formula: randNum = INT(RND * (max - min + 1)) + min
CINT formula: randNum = CINT(RND * (max - min)) + min
Ted
Please acknowledge and thank members who answer your questions!
QB64 is a FREE QBasic compiler for WIN, MAC(OSX) and LINUX : https://www.qb64.org/forum/index.php
Get my Q-Basics demonstrator: https://www.dropbox.com/s/fdmgp91d6h8ps ... s.zip?dl=0
QB64 is a FREE QBasic compiler for WIN, MAC(OSX) and LINUX : https://www.qb64.org/forum/index.php
Get my Q-Basics demonstrator: https://www.dropbox.com/s/fdmgp91d6h8ps ... s.zip?dl=0
INT OR CINT
Great! fortunately, I can use CINT but it will limit the program to QBASIC.
In fact INT was commun to QBASIC and GWBASIC this is why I took it.
What about FIX ?
In fact INT was commun to QBASIC and GWBASIC this is why I took it.
What about FIX ?
- burger2227
- Veteran
- Posts: 2466
- Joined: Mon Aug 21, 2006 12:40 am
- Location: Pittsburgh, PA
FIX only difference is with negative numbers. When negative it rounds less negative than INT which only rounds down as more negative.
INT always rounds down, FIX rounds positive values down too.
INT always rounds down, FIX rounds positive values down too.
Code: Select all
PRINT INT(4.51) ' = 4
PRINT FIX(4.51) ' = 4
PRINT INT(-4.51) ' = -5
PRINT FIX(-4.51) ' = -4
Please acknowledge and thank members who answer your questions!
QB64 is a FREE QBasic compiler for WIN, MAC(OSX) and LINUX : https://www.qb64.org/forum/index.php
Get my Q-Basics demonstrator: https://www.dropbox.com/s/fdmgp91d6h8ps ... s.zip?dl=0
QB64 is a FREE QBasic compiler for WIN, MAC(OSX) and LINUX : https://www.qb64.org/forum/index.php
Get my Q-Basics demonstrator: https://www.dropbox.com/s/fdmgp91d6h8ps ... s.zip?dl=0
INT SURPRISES
CINT Works well. Thanks again
Re: INT SURPRISES
Hi Legrand,LEGRAND wrote:Can somebody explain how I can get the value I want:
h=44.10
D1# = INT(h * 100): PRINT D1#
D2 = 100 * h: PRINT D2
BASIC Answer for D1# is 4409 and not 4410
D2 answer is 4410
How can I have 4410 with INT fonction?
(h can be 44.1035 for instance. I need that INT to cut at that point the 2 last digits).
Thanks for help
I spent about an hour testing your code. You're right, as it stands, you will get a erroneous result in D1# of 4409. Not all values cause this type of error. Using FIX instead of INT will give the same error.
The best I could determine is that this is a problem in the way BASIC evaluates expressions. I've had similar problems myself. To be truthful, I don't understand the problem.
However, if you perform temp = h * 100, and then put temp into the expression where the INT is, the problem goes away.
By the way, CINT works fine for your test case of 44.10. I didn't test other values. For values with more that 2 decimal digits, if you still multiply by 100, CINT may round it up using Bankers' Rounding.
Values having more than 2 decimal digits will require further testing.
Regards... Moneo
CINT new surprise
Here is a new issue. The code is:
L = (CINT((36.5106 - CINT(36.5106)) * 100) / 60)
PRINT L
L2 = (CINT((CINT(36.5106) - 36.5106) * 100) / 60)
PRINT L2
The first one is negative ,The second positive.
Not really a good surprise. It is added to CINT(36.5106) whic gives 37
In other words I really don't know how to transform my angles from DD.MMSS to decimals: Depending of values results are correct (under **.5*** values (as 36.49.50) or wrong(as the one above)
I cannot believe there are not safe solutions.
L = (CINT((36.5106 - CINT(36.5106)) * 100) / 60)
PRINT L
L2 = (CINT((CINT(36.5106) - 36.5106) * 100) / 60)
PRINT L2
The first one is negative ,The second positive.
Not really a good surprise. It is added to CINT(36.5106) whic gives 37
In other words I really don't know how to transform my angles from DD.MMSS to decimals: Depending of values results are correct (under **.5*** values (as 36.49.50) or wrong(as the one above)
I cannot believe there are not safe solutions.
- burger2227
- Veteran
- Posts: 2466
- Joined: Mon Aug 21, 2006 12:40 am
- Location: Pittsburgh, PA
CINT both values AFTER subtracting. The value returned = 0. This would indicate no difference in the two angles.
If you want better accuracy, don't use an INT or CINT integer return at all!
If you want better accuracy, don't use an INT or CINT integer return at all!
Please acknowledge and thank members who answer your questions!
QB64 is a FREE QBasic compiler for WIN, MAC(OSX) and LINUX : https://www.qb64.org/forum/index.php
Get my Q-Basics demonstrator: https://www.dropbox.com/s/fdmgp91d6h8ps ... s.zip?dl=0
QB64 is a FREE QBasic compiler for WIN, MAC(OSX) and LINUX : https://www.qb64.org/forum/index.php
Get my Q-Basics demonstrator: https://www.dropbox.com/s/fdmgp91d6h8ps ... s.zip?dl=0