Операции + и - в конструкторе имеют разную логику (wtf)?



  • Создаю переменную и в значении выбираю конструктор выражений, там создаю такую конструкцию:

    a) ((([[VAR1]]).split("0.").join("")) - ([[VAR2]]))
    где var1=0.00001000 и var2=300
    получаю в результате 700
    ОК!

    б) ((([[VAR1]]).split("0.").join("")) + ([[VAR2]]))
    те же значения
    получаю 00001000300
    WTF!

    Это баг или фича? Если фича, то зачем и как нормально решить мою задачу?



  • @Antonio нужно преобразовать в число.
    parseInt(((([[VAR1]]).split("0.").join(""))) + parseInt([[VAR2]])



  • @DrPrime не работает так, пишет SyntaxError.
    Понятно, что складывается как строки, а вычитается как числа. Главный вопрос - почему такая разница между + и - ? Это скорее к автору, если это не только у меня так работает.
    Но и за решение буду благодарен.



  • @Antonio скорее всего это особенность js при работе с оператором -
    parseInt(([[VAR1]].split("0.")).join("")) + parseInt([[VAR2]]) - там лишние скобки были от конструктора, убрал, вот так должно работать



  • @DrPrime, не мог понять, что вообще происходит и почему это выражение выдает какой-то странный ответ. Оказалось, что parseInt([[VAR1]]) при var1=00002000 (это после обрезки "0." спереди) превращается в "1". Т.е. в значение по умолчанию, когда переключаешь тип на int.



  • В общем нашел два решения:

    Либо через "Выполнить код"

    var a1 = [[VAR1]]; var b1 = 0.00000300; // вместо 0.00000300 тоже может быть переменная из Баса
    var c1 = Number(a1)+Number(b1);
    [[RESULT]] = Number(c1); // сохраняем сумму в переменную result и дальше в Басе с ней работаем
    

    Либо сложить вычитанием в конструкторе ¯\_ (ツ)_/¯

    ([[[VAR1]]) - (-0.00000300)
    

    Профит.


  • administrators

    @Antonio said in Операции + и - в конструкторе имеют разную логику (wtf)?:

    Главный вопрос - почему такая разница между + и - ? Это скорее к автору, если это не только у меня так работает.

    Тут достаточно все достаточно логично,
    строка + строка = строка,
    строка - строка = число

    Но это поведение js, я не имею к этому отношения.
    Если интересно, то вот еще много забавного https://gist.github.com/MichalZalecki/c964192f830360ce6361


  • administrators


Log in to reply
 

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