python какой тут очевидный способ для вывода float с переменной точнос

Phoenix

Почему не работает моё "решение" я понимаю. Я его привожу, чтобы показать, что я хочу.
>>> a = 1.123
>>> a
1.123
>>> print ("%.2f" % a)
1.12
>>> b = 2
>>> print ("%."+b+"f"%a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
>>>
Возможно есть какая-то функция, но вот dir(a) ничего не показал.

pitrik2

а причем тут "очевидный способ для вывода float с переменной точнос"?
вывод то нормуль работает

>>> c = "%.2f"
>>> print (c % a)
1.12

а то что ты спрашиваешь это как преобразовать число в строку
http://lmgtfy.com/?q=python+int+to+string

>>> print "%."+str(b)+"f") % a)
1.12

Phoenix

спасибо. разбираюсь.

conv3rsje

А доки почитать?
>>> "%.*f" % (3, 0.12345)
'0.123'
>>> "%.*f" % (2, 0.12345)
'0.12'

Phoenix

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

pitrik2

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

conv3rsje

питон
Окстись, это в стандартном printf есть.

$ cat test.c
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("%.*f\n", 2, 0.12345);
printf("%.*f\n", 3, 0.12345);
return 0;
}
$ gcc -otest test.c
$ ./test
0.12
0.123

upd
шелл :)

$ printf "%.*s\n" 2 "abcde"
ab
$ printf "%.*s\n" 3 "abcde"
abc

Dasar

Окстись, это в стандартном printf есть.
в стандартном? или в gcc-шном?

conv3rsje

в стандартном? или в gcc-шном?
Хз. но ман вот что пишет

Unix V7 defines the three routines printf fprintf sprintf and has the flag -, the width or precision *, the length modifier l, ...

Andbar

в стандартном? или в gcc-шном?
В cl-ном тоже есть

ava3443

в стандартном? или в gcc-шном?
в стандартном.
вот, например:
- The Single UNIX ® Specification, Version 2
- IEEE Std 1003.1, 2004 Edition
- ISO C 99, раздел 7.19.6.1 "The fprintf function", 4 параграф
Оставить комментарий
Имя или ник:
Комментарий: