Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 1, 2008 15:19:38

foxtrot
От:
Зарегистрирован: 2008-09-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

Подскажите пожалуйста, как сделать разделение чисел по тысячам?
например, если число: 1234567890, то мне надо чтоб было: 1,234,567,890

         if price >= 10000:
price = "<font color=00CCFF>"+str(price)+"</font>"
elif price >= 100000:
price = "<font color=FF0099>"+str(price)+"</font>"
elif price >= 1000000:
price = "<font color=FFCC00>"+str(price)+"</font>"
elif price >= 10000000:
price = "<font color=00FF66>"+str(price)+"</font>"
elif price >= 100000000:
price = "<font color=33CCCC>"+str(price)+"</font>"
elif price >= 1000000000:
price = "<font color=FF0066>"+str(price)+"</font>"
else:
price = "<font color=FFFFFF>"+str(price)+"</font>"



Офлайн

#2 Сен. 1, 2008 16:11:06

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

O_O
Лобовое:

number = 1234567890
counter = 0
formatted_number = ''
for i in reversed(str(number)):
counter += 1
formatted_number += i
if counter==3:
formatted_number += ','
counter = 0
print formatted_number[::-1]

Офлайн

#3 Сен. 1, 2008 17:20:16

foxtrot
От:
Зарегистрирован: 2008-09-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

Ferroman, благодарю!



Офлайн

#4 Сен. 1, 2008 17:53:49

foxtrot
От:
Зарегистрирован: 2008-09-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

упс, проблема с числами вида: 123, 123456, 123456789.
он ставит запятую перед ними.



Офлайн

#5 Сен. 1, 2008 18:03:19

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

Ну, такую проблему, можно и самому решить.

Офлайн

#6 Сен. 1, 2008 18:54:20

foxtrot
От:
Зарегистрирован: 2008-09-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

Ferroman
Ну, такую проблему, можно и самому решить.
спасибо =) окончательный вариант у меня выглядит так:
на jython почемуто reversed(str(price)) не сработало.
         fprice = str(price)
fprice = fprice[::-1]
counter = 0
formatted_number = ''
for i in str(fprice):
counter += 1
formatted_number += i
if counter==3:
if price <1000:
formatted_number += ''
counter = 0
elif price > 1000 and price <1000000:
formatted_number += ','
counter = -1
else:
formatted_number += ','
counter = 0
pricee = formatted_number[::-1]



Офлайн

#7 Сен. 1, 2008 19:15:51

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

У нас уже строка. Зачем столько сравнений в цикле, когда надо просто убрать 1 символ, если он есть?

number = 123456
counter = 0
formatted_number = ''
for i in str(number)[::-1]: # переворачиваем строку
counter += 1
formatted_number += i
if counter==3:
formatted_number += ','
counter = 0
formatted_number = formatted_number[::-1] # переворачиваем строку назад.
if formatted_number[0]==',':
formatted_number = formatted_number[1:] # если есть запятая перед числом - убираем.
print formatted_number
Код можно укоротить, оптимизировать, если хочется красивше. Ну и вообще как функцию его описать надо бы.

Отредактировано (Сен. 1, 2008 19:20:04)

Офлайн

#8 Сен. 1, 2008 19:27:10

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

import locale
locale.setlocale(locale.LC_NUMERIC, 'English_United States.1252')
print locale.format('%d', 12345, True)



Отредактировано (Сен. 1, 2008 19:41:50)

Офлайн

#9 Сен. 1, 2008 19:50:37

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

Ferroman
У нас уже строка. Зачем столько сравнений в цикле, когда надо просто убрать 1 символ, если он есть?
number = 123456
counter = 0
formatted_number = ''
for i in str(number)[::-1]: # переворачиваем строку
counter += 1
formatted_number += i
if counter==3:
formatted_number += ','
counter = 0
formatted_number = formatted_number[::-1] # переворачиваем строку назад.
if formatted_number[0]==',':
formatted_number = formatted_number[1:] # если есть запятая перед числом - убираем.
print formatted_number
Код можно укоротить, оптимизировать, если хочется красивше. Ну и вообще как функцию его описать надо бы.
В этом коде засада с отрицательными числами



Офлайн

#10 Сен. 1, 2008 19:52:07

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

[?] Форматирование чисел

В этом коде засада не только с отрицательными, но и с дробями.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version