Erstellen Sie kompakte / menschenfreundliche Schwimmer mit vulgären Unicode-Fraktionen
Gibt es Module (vorzugsweise in der Standardbibliothek), die eine Gleitkommazahl in etwas verwandeln können, das menschlicher ist? Vielleicht ist es nicht menschlicher, aber immerhin kompakter.
z.B. 4,625 würde "4⅝" werden
(Bonus Brownie Points für das Erkennen von Pi mit einer angemessenen Genauigkeit)
Dieser Code war das Beste, was ich mir einfallen lassen konnte:
import unicodedata
def simplify_float(number):
vf = "VULGAR FRACTION "
vulgars = {0.125 : unicodedata.lookup(vf + "ONE EIGHTH"),
0.2 : unicodedata.lookup(vf + "ONE FIFTH"),
0.25 : unicodedata.lookup(vf + "ONE QUARTER"),
0.375 : unicodedata.lookup(vf + "THREE EIGHTHS"),
0.4 : unicodedata.lookup(vf + "TWO FIFTHS"),
0.5 : unicodedata.lookup(vf + "ONE HALF"),
0.6 : unicodedata.lookup(vf + "THREE FIFTHS"),
0.625 : unicodedata.lookup(vf + "FIVE EIGHTHS"),
0.75 : unicodedata.lookup(vf + "THREE QUARTERS"),
0.8 : unicodedata.lookup(vf + "FOUR FIFTHS"),
0.875 : unicodedata.lookup(vf + "SEVEN EIGHTHS")}
decimal = int(number)
if number == decimal:
return unicode(decimal)
vulgar = vulgars.get(number - decimal)
if vulgar:
if decimal == 0:
return vulgar
return "%d%s" % (decimal, vulgar)
return "%.1f" % number
Mit dem Unicode-Modul ist es ziemlich einfach, in die andere Richtung zu wechseln, aber ich konnte überhaupt keinen guten Weg finden, diese Zeichenfolgen zu erstellen.