2009-10-07 2 views
10

У меня есть поплавок: 1.2333333Как изменить мой float на два десятичных числа с запятой в качестве разделителя десятичной точки в python?

Как изменить его на два десятичных числа с запятой в качестве разделителя десятичной точки, например 1,23?

+0

боян: http://stackoverflow.com/questions/316238/python-float-to-decimal-conversion –

+0

@ Олафур Вааге - локаль материал не в http://stackoverflow.com/questions/ 316238/python-float-to-decimal-conversion –

ответ

8

Чтобы получить два десятичных знака, используйте

'%.2f' % 1.2333333 

Чтобы получить запятую, используйте replace():

('%.2f' % 1.2333333).replace('.', ',') 

Второй вариант был бы change the locale какое-то место, которое использует запятую, а затем использовать locale.format() :

locale.setlocale(locale.LC_ALL, 'FR') 
locale.format('%.2f', 1.2333333) 
+0

Это абсолютно неправильно. стандартный форматир строки "% f" 'не зависит от языка. – u0b34a0f6ae

+0

Иногда это: https://bugs.webkit.org/show_bug.cgi?id=18994 Я улучшил свой ответ, чтобы избежать двусмысленности. –

+0

@FlorianPilz: Не с моей версией Python, а не [согласно документации] (https://docs.python.org/2/library/stdtypes.html#str.replace) –

1

Если вы не хотите связываться с l ocale, вы можете, конечно, сделать форматирование самостоятельно. Это могло бы служить в качестве отправной точки:

def formatFloat(value, decimals = 2, sep = ","): 
    return "%s%s%0*u" % (int(value), sep, decimals, (10 ** decimals) * (value - int(value))) 

Обратите внимание, что это будет всегда усечение дробной части (т.е. 1,04999 будет печатать, как 1,04).

7

locale module может помочь вам с чтением и записью чисел в формате локали.

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, "") 
'sv_SE.UTF-8' 
>>> locale.format("%f", 2.2) 
'2,200000' 
>>> locale.format("%g", 2.2) 
'2,2' 
>>> locale.atof("3,1415926") 
3.1415926000000001 

 Смежные вопросы

  • Нет связанных вопросов^_^