Finding lowest number to multiply a fraction and get a whole

775 Views Asked by At

I am trying to find the multiplier for a fraction that will let me get a whole number.

So trying to solve $c = a \times b$

Where $a$ is a number like $1.6$ or $0.7$ or $5.24$

Where $b$ is the lowest number that $a$ can be multiplied by to make $c$ a whole number.

The use case is in a game I am programming the currency is only in whole numbers of a single denomination (single gold coins) if the player wants to sell a quantity of items that are worth a fractional value like $1.6$, how many must they sell so they can receive a whole number without throwing out the fractions.

3

There are 3 best solutions below

2
On BEST ANSWER

Multiply $a = \dfrac 85$ by $b = 5$ to get $$c= \frac 85\cdot 5 = 8$$

When a rational number is expressed as a fraction $\dfrac nd$ that is fully reduced meaning $\gcd(n, d)=1$, with (n, numerator; d, denominator, each an integer,) then we have $$a = \frac nd\quad \text{ so we put }\; b = d,$$ and so $$c = \frac nd\cdot d = n$$

That is, any rational number expressed as a fully reduced fraction where the numerator and denominator are co-prime, then the lowest integer value for $b$ is given by $bd$, where $d$ is the denominator of the fully reduced fraction = $a$

1
On

I assume you mean to ask the following question:

Given a rational number $a$, what is the smallest integer value of $b$ for which $ab$ is an integer

The solution is simple: if you write $a$ as a fraction in lowest terms, then $b$ is the denominator.

3
On

I'd suggest this algorithm: multiply by $10$ repeatedly until you have an integer. You can now write your decimal as a fraction: $\frac{k}{10^n}$. Then, use any factorization algorithm to find the greatest common divisor of $k$ and $10^n$, and divide both the numerator and denominator by that. This puts the fraction in lowest terms, and now the denominator is the number you wanted.

For the record: This is a horribly inefficient algorithm. If you need it to be fast (for example, if you're trying to do billions of these calculations) you'll want to do something else. But it'll work if you're only trying to do it a hundred times a second, or something like that.