Делаю калькулятор на 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 кг 1000 граммов или 0.001 тонна. Получаем, что ratio = 0.000000001 (1 миллиардная)
- Делим 1 тонну на ratio (0.000000001), должны получить 1 млрд (1000000000), однако получаем: 999999999.9999999 - Decimal никак не помогает Если, например, переводить из 1 тонны в те же граммы, то всё будет работать как надо.

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