Создание компактных / дружественных для человека поплавков с использованием вульгарных фракций Unicode
Существуют ли какие-либо модули (желательно в стандартной библиотеке), которые могут превратить число с плавающей точкой в нечто более удобное для человека? Может быть, это не более дружелюбный человек, но по крайней мере более компактный.
например. 4.625 станет "4⅝"
(Бонусные очки брауни за распознавание пи с разумной точностью)
Этот набросок кода был лучшим, что я мог придумать:
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
Идти в другом направлении довольно легко, используя модуль unicodedata, но я не смог найти хорошего способа для написания этих строк.