Podcast #128: We chat with Kent C Dodds about why he loves React and discuss what life was like in the dark days before Git. Listen now.

2 added 9 characters in body

## Ruby, 127127 125 bytes

f=->n{b=q=r=(m=n.sub(?.,'').to_r)/d=10**(p=nd=10**p=n.count('0-9')-1)
b=r if(r=(q*d-=1).round.to_r/d).round(p).to_f.to_s==n while d>1
b}


Defines a function f which returns the result as a Rational. E.g. if you append this code

p f["1.7"]
p f["0."]
p f["0.001"]
p f["3.1416"]


You get

(5/3)
(0/1)
(1/667)
(355/113)


The loop is over denominators. I'm starting with the full fraction, e.g. 31416/10000 for the last example. Then I'm decrementing the denominator, proportionally decrement the numerator (and round it). If the resulting rational rounds to the same as the input number, I'm remembering a new best fraction.

## Ruby, 127 bytes

f=->n{b=q=r=(m=n.sub(?.,'').to_r)/d=10**(p=n.count('0-9')-1)
b=r if(r=(q*d-=1).round.to_r/d).round(p).to_f.to_s==n while d>1
b}


Defines a function f which returns the result as a Rational. E.g. if you append this code

p f["1.7"]
p f["0."]
p f["0.001"]
p f["3.1416"]


You get

(5/3)
(0/1)
(1/667)
(355/113)


The loop is over denominators. I'm starting with the full fraction, e.g. 31416/10000 for the last example. Then I'm decrementing the denominator, proportionally decrement the numerator (and round it). If the resulting rational rounds to the same as the input number, I'm remembering a new best fraction.

## Ruby, 127 125 bytes

f=->n{b=q=r=(m=n.sub(?.,'').to_r)/d=10**p=n.count('0-9')-1
b=r if(r=(q*d-=1).round.to_r/d).round(p).to_f.to_s==n while d>1
b}


Defines a function f which returns the result as a Rational. E.g. if you append this code

p f["1.7"]
p f["0."]
p f["0.001"]
p f["3.1416"]


You get

(5/3)
(0/1)
(1/667)
(355/113)


The loop is over denominators. I'm starting with the full fraction, e.g. 31416/10000 for the last example. Then I'm decrementing the denominator, proportionally decrement the numerator (and round it). If the resulting rational rounds to the same as the input number, I'm remembering a new best fraction.

1

## Ruby, 127 bytes

f=->n{b=q=r=(m=n.sub(?.,'').to_r)/d=10**(p=n.count('0-9')-1)
b=r if(r=(q*d-=1).round.to_r/d).round(p).to_f.to_s==n while d>1
b}


Defines a function f which returns the result as a Rational. E.g. if you append this code

p f["1.7"]
p f["0."]
p f["0.001"]
p f["3.1416"]


You get

(5/3)
(0/1)
(1/667)
(355/113)


The loop is over denominators. I'm starting with the full fraction, e.g. 31416/10000 for the last example. Then I'm decrementing the denominator, proportionally decrement the numerator (and round it). If the resulting rational rounds to the same as the input number, I'm remembering a new best fraction.