Как в 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?


  • Moderators

    @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");
    

    Я буду очень рад, услышать Ваши идеи :)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.