Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
Как в double добавить точку?
-
Всем привет!
Может мой вопрос и дикий, но не смейтесь раньше времени :)Я из QML'а получаю данные. У меня там есть SpinBox который преобразован с целочисленного на плавающую запятую.
Вот таким образом:
SpinBox { id: spBox_Gear from: 0 value: 0 to: 2000 stepSize: 1 editable: true wrap: true wheelEnabled: true property int decimals: 3 property real realValue: value / 10 x: 173 y: 80 anchors.verticalCenterOffset: -122 anchors.horizontalCenterOffset: -197 validator: DoubleValidator { bottom: Math.min(spBox_Gear.from, spBox_Gear.to) top: Math.max(spBox_Gear.from, spBox_Gear.to) } textFromValue: function(value, locale) { return Number(value / 1000).toLocaleString(locale, 'f', spBox_Gear.decimals) } valueFromText: function(text, locale) { return Number.fromLocaleString(locale, text) * 1000 } }
Я с этого SpinBox'а получаю данные:
property alias spinBox_Gear: spBox_Gear
И в другом QML файле:
property double spBoxValue_Gear: focuserForm.spinBox_Gear.value * 1000
Не удивляйтесь таким решениям. Просто у меня идет передача с вторичной формы в основную. А с основной формы в С++ класс.
В классе я уже вылавливаю его таким образом:
void focusdrive::writeFC(double Gear) {}
И получается суть такова, что если в SpinBox'е будет значение 0.028, то получить мне надо 28.000 (так надо)
Я пробовал умножать и у меня выходило число 28000 - без точки. Как быть?В дальнейшем, я конвертирую число в
QString::number(Gear);
и отправляю по СОМ порту.
В итоге: в классе у меня выходит число 28000. Как разбить double так, чтобы получилось вот такое число 28.000? Не смотря на то, что я ввожу в SpinBox'е 0.028
И да, я знаю что нужно поделить, чтобы была точка, но тогда число будет 0.028, а нужно 28.000
Буду благодарен за любую помощь. Даже если Вы сюда прочитали, то это многое стоит :)
-
Смотрите в сторону региональных настроек - разделение разрядов, можно указать в настройках приложения, а не менять в ОС
http://doc.qt.io/qt-5/qlocale.html
-
@electronik да, я об этом знаю. Только я в классе получаю целое число, а не с плавающей точкой. Я получаю 28000, а как вставить точку, чтобы было 28.000?
-
@razorqhex Mne kazhetsa vy umnazhaete dva raza.
Snachala sdes':valueFromText: function(text, locale) { return Number.fromLocaleString(locale, text) * 1000 }
potom sdes':
property double spBoxValue_Gear: focuserForm.spinBox_Gear.value * 1000
0.028 * 1000 = 28
28 * 1000 = 28000
-
@jsulm ну в
property double spBoxValue_Gear: focuserForm.spinBox_Gear.value * 1000
умножение нужно. Насколько я понимаю, это один из методов, чтобы получить типа DoubleSpinBox.
А вот как сделать так, чтобы на выходе получилось не 0.028 и не 28000, а 28.000 - загадка.
Есть такое решение: на выходе я получаю просто 28, а в классе я уже припаиваю к нему ".000"
Вот:
QString s_Gear = QString(QString::number(Gear) + ".000");
Я буду очень рад, услышать Ваши идеи :)