# rounds numbers????

BlitzPlus Forums/BlitzPlus Beginners Area/rounds numbers????
| ||

Hello, I am currently trying to make a program that uses fractions, such as 1/4, and adds them and subtracts them( i know it sounds stupid, ut i have a special use for it). I dont know how to make fractions, and doubt you can, so i use their decimal equivalents. Anyway, whenever i try to use any type of variable, includng floating point variables, i always get 0 or 1, never .25 or . anything when i didve the two numbers ( like 4 and 1). LIkewise, when i do 10/3, i get 3.0, and never get a decimal. Is there a way to fix this and extend the number of zeros there are after the decimal, or should i learn another programming language for this? Thanks |

| ||

To get a float result, then at least one of the values in the expression needs to be a float also. You should also be aware that floats are only single precision in Blitz and therefore not very accurate. So don't rely on 10.0/4 being 0.25. Because it's more likely to be 0.2499999 or something. |

| ||

Are there any programming languages where the single precisions are extremely accurate? |

| ||

Why not just keep your fractions AS fractions? In other words, maybe create a 'fraction' type to store your values. something like this: Type Fraction Field Numerator Field Denominator End Type |

| ||

Sample code:Type Fraction Field N ;Numerator Field D ;Denominator End Type a.Fraction = New Fraction b.Fraction = New Fraction c.Fraction = New Fraction a\N = 1: a\D = 4 ;1/4 b\N = 10: b\D = 3 ;10/3 c = Add(a, b) Print "1/4 + 10/3 = " + c\N + "/" + c\D a\N = 1: a\D = 11 ;1/11 b\N = 120: b\D = 11 ;120/11 c = Add(a, b) Print "1/11 + 120/11 = " + c\N + "/" + c\D WaitKey Delete Each Fraction End Function Add.Fraction(num1.Fraction, num2.Fraction) If sum.Fraction = Null Then sum.Fraction = New fraction sum\N = num1\N * num2\D + num2\N * num1\D sum\D = num1\D * num2\D sum = Simplify(sum) Return sum End Function Function Simplify.Fraction(num.Fraction) Repeat foundDivisor = False For attempt = 1 To 5 Select attempt Case 1 divisor = 2 Case 2 divisor = 3 Case 3 divisor = 5 Case 4 divisor = 7 Case 5 divisor = 11 ;Case 6 ;continue on for as many prime numbers as you want... End Select If num\N Mod divisor = 0 And num\D Mod divisor = 0 num\N = num\N / divisor num\D = num\D / divisor foundDivisor = True Exit EndIf Next Until foundDivisor = False Return num End Function You owe me ;) ... You know, when I was in sixth grade and was learing how to handle fractions, I thought, OH GOD, this really sucks! But when I later got into algebra and trigonometry, I realized that using fractions was SO MUCH BETTER than dealing with inaccurate decimals. For instance, a number like 1/3 is perfectly represented as a fraction, but can never be perfectly represented as a decimal. That is when I truly realized how valuable fractions were. |

| ||

Hey Paul, was the code I submitted of any help to you? |