2013-02-21 4 views
1

Я хочу знать, как преобразовать строку без десятичных точек в десятичную точку, например, преобразование «1157903» в «1,157903» в питонекак преобразовать строку «1157903» в десятичную «1,157903»

Спасибо ,

+0

Как вы узнаете, где находится десятичная точка? Есть ли местный вопрос - некоторые используют запятые вместо периодов для такого рода вещей, например. – martineau

+0

В основном, я пытаюсь выяснить, как получить входные данные от пользователя, например «11578930», и преобразовать это, чтобы выглядеть так: «11.1M» – danieltisdale

+0

[XY Problem] (http://meta.stackexchange.com/ вопросы/66377/что-это-The-ху-проблема)? –

ответ

4
s = "1157903" 
s2 = '{}.{}'.format(s[0],s[1:]) 
+0

в основном, я пытаюсь выяснить, как получить вход пользователя от пользователя, например «11578930», и конвертировать это, чтобы выглядеть так: «11.1M» – danieltisdale

+2

@ user2093921 - Это похоже на совершенно другую проблему ... – mgilson

+0

знаете ли вы, как бы я решил это? – danieltisdale

0

"1.157903" не десятичный, это строка.

Вы хотите преобразовать строку в число или строковое представление числа в строку с десятичной точкой в ​​ней?

Если это первое, то:

>>> s = '115793' 
>>> float(s)/10 ** (len(s) - 1) 
1.15793 

В противном случае:

>>> '{}.{}'.format(s[0], s[1:]) 
'1.15793' 

Другой метод, чтобы избежать копирования строк является использование bytearray:

>>> ba = bytearray('12345') 
>>> ba.insert(1, ord('.')) 
>>> ba 
bytearray(b'1.2345') 
+0

В основном, я пытаюсь выяснить, как получить вход от пользователя, например «11578930», и преобразовать это, чтобы выглядеть так: «11.1M» или «1157893000» в «1.5B» – danieltisdale

2

Пара больше способов :

>>> s = '115793' 
>>> s[0] + '.' + s[1:] 
'1.15793' 

и

>>> s = '115793' 
>>> '.'.join([s[0], s[1:]]) 
'1.15793' 

Обновление на основе комментариев вы добавили на свой вопрос:

from bisect import bisect 

_METRIC_PREFIXES = [ # must be in ascending order for bisect 
    (0, ''), # <blank> 
    (1, 'da'), # deca 
    (2, 'h'), # hecto 
    (3, 'k'), # kilo 
    (6, 'M'), # mega 
    (9, 'G'), # giga 
    (12, 'T'), # tera 
    (15, 'P'), # peta 
    (18, 'E'), # exa 
    (21, 'Z'), # zetta 
    (24, 'Y'), # yotta 
] 

_BREAKPOINTS = tuple(10.**item[0] for item in _METRIC_PREFIXES) 

def format_numeric_string(s, prec=1): 
    v = int(s) 
    i = bisect(_BREAKPOINTS, v)-1 
    d = _BREAKPOINTS[i] 
    s = _METRIC_PREFIXES[i][1] 
    return '{:.{prec}f}{suffix}'.format(v/d, suffix=s, prec=prec) 

if __name__ == '__main__': 
    import random 
    randigit = lambda: random.choice('123456789') 
    n_digit_string = lambda n: ''.join(d for _ in xrange(n) for d in randigit()) 

    for s in (n_digit_string(prefix[0]+1) for prefix in _METRIC_PREFIXES): 
     print '{:,d} --> {}'.format(int(s), format_numeric_string(s)) 

Образец вывода разной длины случайных числовых строк:

3 --> 3.0 
18 --> 1.8da 
389 --> 3.9h 
3,765 --> 3.8k 
2,152,457 --> 2.2M 
1,965,289,562 --> 2.0G 
7,624,947,619,324 --> 7.6T 
7,424,298,578,879,224 --> 7.4P 
5,546,663,458,831,949,667 --> 5.5E 
4,794,459,711,325,322,715,236 --> 4.8Z 
9,992,885,249,921,967,199,174,883 --> 10.0Y 
+0

Это глупое использование соединения :). – mgilson

+0

Как я могу ввести ввод, такой как «11578903», и показать вывод как «11.5B» в python?Я пытаюсь преобразовать большое число в сокращенную версию его формы. «123456789101112» станет «123.4B». Я сокращаю число после десятичной точки вместо округления десятичной точки. вход: 1000000 Выход: 1M вход: 2500000,34 выход: 2.5M вход: 532 Выход: 532 вход: 1123456789 выход: 1.1B Благодаря. – danieltisdale

+0

Как преобразовать десятичное число в одно десятичное целое и затем преобразовать его обратно в строку? – danieltisdale

0

Новые разъяснения, новый ответ. Я бы, вероятно, приблизился к этому следующим образом:

import math 
SUFFIXES = ['', 'K', 'M'] 

def convert(s): 
    num = s[:len(s) % 3 or 3] 
    return '{}{}'.format(num, SUFFIXES[int(math.ceil(len(s)/3.0) - 1)]) 

In [1]: from n import convert 
In [2]: print convert('123') 
123 
In [3]: print convert('123123') 
123K 
In [4]: print convert('12123') 
12K 
In [5]: print convert('123123123') 
123M 

Вы можете найти десятичные числа, используя комбинацию этого и других ответов.

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