0

Делаю калькулятор на 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 тонны в те же граммы, то всё будет работать как надо.

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

Raven
  • 67
  • "Decimal никак не помогает" - а где ваш код с Decimal? Decimal реально помогает. Просто видимо вы не умеете им пользоваться. https://docs.python.org/3/library/decimal.html – CrazyElf Oct 25 '23 at 11:13

0 Answers0