float
сохраняет значения с плавающей запятой, то есть значения, которые имеют потенциальные десятичные места int
, сохраняют только целые значения, т. е. целые числа Таким образом, хотя оба они имеют ширину в 32 бита, их использование (и представление) совершенно иное. Вы не можете хранить 3.141 в целых числах, но вы можете в float
.
Рассеивать их еще немного:
В целые числа все биты используются для хранения значения числа. Это (на Java и многие компьютеры) сделано в так называемом дополнении two . Это в основном означает, что вы можете представлять значения & minus; 231 to 231 & nbsp; & minus; & nbsp; 1.
В поплавке эти 32 бита разделяются между тремя отдельными частями: знаковый бит, показатель экспоненты и мантисса. Они выложены следующим образом:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
Существует один бит, который определяет, является ли число отрицательным или неотрицательным (ноль не является ни положительным, ни отрицательным, но имеет битовый знак, установленный в ноль) , Тогда есть восемь бит экспонента и 23 бит мантиссы. Для получения полезного номера из этого (примерно) выполняется следующий расчет:
M × 2 E
< / blockquote>(Этого больше, но этого должно хватить для цели этого обсуждения)
Мантисса по существу не намного больше, чем 24-битное целое число. Это умножается на 2 на степень экспоненциальной части, которая, грубо говоря, представляет собой число между & минус 128 и 127.
Поэтому вы можете точно представлять все числа, которые будут вписываться в 24-битное целое число но числовой диапазон также намного больше, поскольку более крупные экспоненты допускают большие значения. Например, максимальное значение для параметра
float
составляет около 3,4 × 1038, тогда какint
допускает только значения до 2,1 × 109.Но это также означает, поскольку 32 бита имеют только 4,2 × 109 разных состояния (которые все используются для представления значений
int
могут сохраняться), что на большем конце числового диапазонаfloat
номера разнесены на более широкие расстояния (поскольку не может быть более уникальныхfloat
чисел, чем есть уникальные номераint
). Вы не можете точно представлять некоторые цифры. Например, число 2 × 1012 имеет представление вfloat
из 1 999 999 991 808. Это может быть закрыть до 2 000 000 000 000, но это не точно. Аналогично, добавление 1 к этому числу не меняет его, потому что 1 слишком мал, чтобы изменить разницу в больших масштабахfloat
.Аналогичным образом вы также можете представлять очень маленькие числа (между 0 и 1) в
float
, но независимо от того, являются ли цифры очень большими или очень маленькими,float
имеет точность приблизительно 6 или 7 десятичных цифр. Если у вас есть большие числа, эти цифры находятся в начале номера (например, 4.51534 × 1035, что составляет не более 451534, после 30 нулей - иfloat
не может ничего сказать о том, действительно ли эти 30 цифр являются нулями или чем-то еще ), для очень малых чисел (например, 3.14159 × 10 и минус 27) они находятся в дальнем конце номера, за пределами начальных цифр 0,0000 ...
Попробуйте это:
from tkinter import *
def entry():
ent[i].configure(state = NORMAL)
window=Tk()
nac = {}
ent = {}
for i in range(10):
de = IntVar()
nac[i]=IntVar()
na=Checkbutton(window, text='%s' % (i), borderwidth=1,variable = nac[i],
onvalue = 1, offvalue = 0,command=entry)
na.grid(row=i, column=0)
ent[i]=Entry(window,textvariable=de, state = DISABLED)
ent[i].grid(column=1,row=i,padx=20)
window.mainloop()