Вход

Просмотр полной версии : Калькулятор. Ошибки в расчетах.


nanoT1m
21.07.2012, 23:57
<html>
<head>
<meta charset="utf-8">
</head>
<body>

<input type="label" id="labelField" />
<input type="button" onclick="solve()" value="=">
<br />

<input type="button" onclick="getValue(1)" value="1">
<input type="button" onclick="getValue(2)" value="2">
<input type="button" onclick="getValue(3)" value="3">
<input type="button" onclick="clearExpr()" value="c">
<br />

<input type="button" onclick="getValue(4)" value="4">
<input type="button" onclick="getValue(5)" value="5">
<input type="button" onclick="getValue(6)" value="6">
<input type="button" onclick="getValue('*')" value="*">
<br />

<input type="button" onclick="getValue(7)" value="7">
<input type="button" onclick="getValue(8)" value="8">
<input type="button" onclick="getValue(9)" value="9">
<input type="button" onclick="getValue('/')" value="/">
<br />

<input type="button" onclick="getValue(0)" value="0">
<input type="button" onclick="getValue('+')" value="+">
<input type="button" onclick="getValue('-')" value="-">
<input type="button" onclick="getValue('.')" value=".">

<script>
var val = '';

var expr = {
val: '',
err: false
};

function getValue(val) {
if (expr.err) {
document.getElementById('labelField').value ='';
expr.err = false;
}
val += this.val;
document.getElementById('labelField').value += val;
}

function clearExpr() {
document.getElementById('labelField').value = '';
}

function solve() {
expr.val = document.getElementById('labelField').value;
try {
expr.val = eval(expr.val);
if (!isFinite(expr.val)) throw new Error();
document.getElementById('labelField').value = expr.val;
}catch (e) {
document.getElementById('labelField').value = 'Ошибка';
expr.val = '';
expr.err = true;
}
}

</script>
</body>
</html>


Начал изучение JS с создания простенького калькулятора. Наткнулся на проблему: к примеру, если попробовать посчитать значение выражения 1-1.9 то получится результат -0,89999999999. С чем это связанно?

Aetae
22.07.2012, 00:04
http://javascript.ru/forum/misc/9459-chavo-chasto-zadavaemye-voprosy-faq.html п.8
Читайте faq прежде чем задать вопрос.

lord2kim
22.07.2012, 00:22
nanoT1m, смотрите каждое из чисел и в toFixed() подставляйте max количество знаков после "запятой"
и такого элемента не существует (http://htmlbook.ru/html/input/type)

<input type="label" id="labelField" />

nanoT1m
22.07.2012, 23:52
Спасибо :) почитал учебник много интересного узнал по этой проблеме.
lord2kim, написал что первое в голову пришло (: странно, но этот label все же работает.

Aetae
23.07.2012, 02:42
Неизвестные типы input type трактуются как text:
<input>