dpoint = '.' def fracform(num, dem, places): assert places>= 0 # replace with conditional, probably before call q, r = divmod(num*10**places, dem) if r> dem//2: # example rounding, change to match floats q += 1 raw = str(q) if len(raw) < places + 1: raw = '0' * (places + 1 - len(raw)) + raw if places: return raw[:-places] + dpoint + raw[-places:] else: return raw + dpoint # 4/7 = 0.5714285714285714 # 400/7 = 57.142857142857146 # 4/700 = 0.005714285714285714 for p, s in ( (0, '1.'), (1, '0.6'), (2, '0.57'), (5, '0.57143'), (8, '0.57142857'),): d = fracform(4, 7, p) assert d == s for p, s in ( (0, '57.'), (1, '57.1'), (2, '57.14'), (5, '57.14286'),): d = fracform(400, 7, p) assert d == s for p, s in ( (0, '0.'), (1, '0.0'), (2, '0.01'), (5, '0.00571'), (8, '0.00571429'),): d = fracform(4, 700, p) assert d == s

AltStyle によって変換されたページ (->オリジナル) /