Неточные вычисления в Python

Делаю калькулятор на Python, дошёл до преобразователей. Нужно преобразовать из тонн в миллиграммы. Я уже сделал перевод любых единиц подобным образом:

ui_main.py
...
class Ui_MainWindow(object):
   def setupUi(self):
       ...
   
   def converter(self):
        ...
        self.weight_items = {
            'миллиграммов': 1000000,
            'граммов': 1000,
            'килограммов': 1, # СИ
            'тонн': 0.001,
            'унций': 35.27,
            'фунтов': 2.204623,
            'стоунов': 0.157473
        }
        ...
        self.items = {
            'converter-volume': self.volume_items,
            'converter-square': self.square_items,
            'converter-weight': self.weight_items,
            'converter-length': self.length_items,
            'converter-energy': self.energy_items,
            'converter-power': self.power_items,
            'converter-data': self.data_items,
            'converter-pressure': self.pressure_items,
            'converter-time': self.time_items
        }
        self.comboBox.clear()
        self.comboBox_2.clear()
        self.comboBox.addItems(self.items[mode].keys())
        self.comboBox_2.addItems(self.items[mode].keys())
        self.lineEdit.setAlignment(Qt.AlignLeft|Qt.AlignTrailing|Qt.AlignVCenter)
        self.lineEdit.setMaxLength(15)
        ...
    ...
...
main.py
...
from ui_main import Ui_MainWindow
    class MainWindow(QMainWindow)
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        ...

    def convert(self):
        text = self.ui.lineEdit.text()
        try:# Делим коэффицент переводимого числа относительно СИ 
            # (здесь кг) на коэффицент необходимой единицы
            ratio = self.ui.items[self.current_mode][self.ui.comboBox.currentText()] / self.ui.items[self.current_mode][self.ui.comboBox_2.currentText()]
        # Получаем, что ratio = 1e-9 (0.000000001)
        except:
            return
        # Делим 1 тонну на 0.000000001 и должны получить 1.000.000.000
        text_2 = str(float(text) / ratio)
        self.ui.lineEdit_2.setText(text_2)
        self.format()

def main():
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

if __name__ == '__main__':
    main()

Разъясню:

  1. Получаем отношение единиц друг к другу: здесь значение каждой единицы измерения (ключа) это отношение к основной единице измерения, здесь основная единица - кг. То беж в 1 кг 1000 граммов или 0.001 тонна. Получаем, что ratio = 0.000000001 (1 миллиардная)
  2. Делим 1 тонну на ratio (0.000000001), должны получить 1 млрд (1000000000), однако получаем: 999999999.9999999 - Decimal никак не помогает Если, например, переводить из 1 тонны в те же граммы, то всё будет работать как надо.

введите сюда описание изображения


Ответы (0 шт):