生成格式字符串的方法可能更短;但是它们很容易就可以映射到每个量级。我不完全了解您想要w / r / t小数点长度的行为,但是这样做的逻辑应该很简单。
由于您拥有的是一种方法,因此我将其合并到一个类中。(这也避免了
formats每次调用函数时都进行定义。)
from math import log10class Formatter(object): def __init__(self): self.formats = (('%1.1f', 0), ('%2.1f', 0), ('%1.2f K', 3), ('%1.2f K', 3), ('%2.1f K', 3), ('%1.2f M', 6), ('%1.2f M', 6), ('%2.1f M', 6), ('%1.2f B', 9), ('%1.2f B', 9), ('%2.1f B', 9), ('%1.2f T', 12), ('%1.2f T', 12), ('%2.1f T', 12)) def human_readable(self, x): if x == 0: return '0' magnitude = int(log10(abs(x))) if magnitude > 13: format_str, denominator_mag = '%i T', 12 else: format_str, denominator_mag = self.formats[magnitude] return (format_str % (x * 1.0 / (10 ** denominator_mag))).lstrip('0')
编辑 :这是不使用查找表的一个:
def human_readable(self, x): if x == 0: return '0' magnitude = int(log10(abs(x))) if magnitude > 13: format_str = '%i T' denominator_mag = 12 else: float_fmt = '%2.1f ' if magnitude % 3 == 1 else '%1.2f ' illion = (magnitude + 1) // 3 format_str = float_fmt + ['', 'K', 'M', 'B', 'T'][illion] denominator_mag = illion * 3 return (format_str % (x * 1.0 / (10 ** denominator_mag))).lstrip('0')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)