Если ошибка, о которой вы говорите, выглядит примерно так:
Uncaught TypeError: Cannot read property '1' of null
Это из-за вашей функции getValue. Я предлагаю вместо использования чего-то столь же сложного, как
function getValue(v) {
return +v.toString().match(/\.(\d*)/)[1] || 0;
}
использовать
function getValue(v) {
return floor((v % 1) * 100);
}
Это имеет тот же эффект, что и код, который вы написали. Например, из входных данных 3.13 возвращается 13.
Но есть и другие проблемы.
Во-первых, вам следует обновлять переменную num время от времени и часто, в противном случае , она всегда будет оставаться пустой строкой (вы определили ее только в строке 20 и не обновляли ее после этого).
Во-вторых, вы должны очистить d и p переменная после использования. На данный момент обе эти переменные продолжают увеличиваться при каждом запуске функции getTotal
На вопрос о том, как вы можете добавить два числа, я предлагаю вам создайте переменную, в которой вы можете сохранить первое число, введенное пользователем.
Например, когда пользователь набрал 4.19 и нажал кнопку «плюс», сохраните этот 4.19 в переменной (скажем, firstNum ). Затем, когда пользователь нажал кнопку равенства, добавьте число из текущего поля ввода с переменной firstNum .
От того, как именно вы собираетесь добавить два разных числа, разбейте два числа, которые вы хотите добавить в части Acres и части Karats. Затем добавьте их отдельно, затем используйте ваш getTotal .
Так что, если число равно 3,21 и 5,18, добавьте 3 и 5, добавьте 21 и 18, а затем добавьте оба. вы получите 8,39. Наконец, конвертируйте 8.39 в 9.15.
Извините, если мои расчеты неверны. Я впервые с этой концепцией! Но я верю, что это путь к go.