У меня есть скрипт, который генерирует некоторые числа (в частности, раз в эпоху).

Каждый раз, когда он генерирует число, я добавляю число в массив (называемый VALUES) и печатаю как массив, так и этот номер. Однако число не содержит столько знаков после запятой, сколько число в массиве.

Например, пример вывода будет выглядеть следующим образом (после 3 итераций):

VALUES = [733948.45278935181, 733948.45280092594, 733948.45280092594]
Number = 733948.452801

Третье число в массиве соответствует значению в Number.

Почему они содержат разное количество позиций после десятичной?

Не по теме: каковы числа после десятичного числа? Я думал, что для них есть какой-то математический термин, я просто не могу вспомнить, что это такое.

Примечание: код был в Python.

13
Paul 14 Июл 2010 в 01:16

4 ответа

Лучший ответ

Когда python печатает число, он иногда печатает больше десятичных знаков в зависимости от того, вызывает ли внутренний метод repr или str (оба преобразуют число в строку). repr вернет больше десятичных знаков, а str - нет.

print вызывает str, поэтому, когда вы делаете print Number, он немного обрезает его. Однако при преобразовании списка чисел в строку при выполнении print VALUES список будет внутренне использовать repr, предоставляя ему больше десятичных знаков.

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

Если вы хотите заставить его использовать определенное количество десятичных знаков, вы можете сделать это:

print "%.3f" % 3.1415   # prints 3.142
11
Donald Miner 13 Июл 2010 в 21:23

Когда вы печатаете список, он печатает repr (x) для каждого x в списке.

Когда вы печатаете номер, он печатает str (x).

Например:

>>> print 123456789.987654321
123456789.988

>>> print [123456789.987654321]
[123456789.98765433]

>>> print str(123456789.987654321)
123456789.988

>>> print repr(123456789.987654321)
123456789.98765433
4
zvone 13 Июл 2010 в 21:26

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

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

1
Zduff 2 Сен 2018 в 19:30

Чтобы получить точность, которую вы хотите, вам нужно что-то вроде:

VALUES = [733948.45278935181, 733948.45280092594, 733948.45280092594]
for v in VALUES:
    print '%18.11f' % (v)

И термин, который я всегда использовал для этих цифр после десятичной точки, это «те цифры после десятичной точки». :-)

1
GreenMatt 13 Июл 2010 в 21:29