2015-05-20 19 views
1

我使用humanize庫來生成一些人類閱讀數字。 這適用於數百萬人。使用python人性化數字

humanize.intword(123455913) # 123.5 million 

我的問題是關於數千。

humanize.intword(1000) # I am expecting something like 1k, but the output is 1000 

基本上人性化只能與數百萬的作品。對此有何想法?另一個庫或純Python的實現?

回答

4

這個庫似乎並不支持特定的使用情況,但你可以通過編輯numbers.py線54和55添加的功能:

powers = [10 ** x for x in (3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 100)] 
human_powers = (N_('thousand'), N_('million'), N_('billion'), N_('trillion'), N_('quadrillion'), 
       N_('quintillion'), N_('sextillion'), N_('septillion'), 
       N_('octillion'), N_('nonillion'), N_('decillion'), N_('googol')) 
+1

這應該被添加到庫中。謝謝 – user2990084

2

該做的工作對我來說:

def humanize_number(value, fraction_point=1): 
    powers = [10 ** x for x in (12, 9, 6, 3, 0)] 
    human_powers = ('T', 'B', 'M', 'K', '') 
    is_negative = False 
    if not isinstance(value, float): 
     value = float(value) 
    if value < 0: 
     is_negative = True 
     value = abs(value) 
    for i, p in enumerate(powers): 
     if value >= p: 
      return_value = str(round(value/(p/(10.0 ** fraction_point)))/
           (10 ** fraction_point)) + human_powers[i] 
      break 
    if is_negative: 
     return_value = "-" + return_value 

    return return_value