Цитата:
в финансовых вычислениях, например, используется arbitrary-precision arithmetic но в большинстве реальных задач это не имеет смысла а ты чего хочешь сделать? |
это просто небольшая задачка для себя самого. смысл:
Я получаю пример в виде суммы из двух чисел. числа генерятся рандомно, причем цифры должны быть с дробной частью, но к примеру с двумя цифрами после точки. Далее вызывается prompt(). Я ввожу ответ. и он проверяется. И тут облом. оказывается ответ который я ввожу неверен. собственно это все. ничего для спасения мира:) UPD Пробывал даже так: 1)получить рандомное число 2)перевести его в строку 3).substr(0,4) этой строки 4)отнять от этой строки ноль. то есть перевести ее в число. |
Цитата:
если ты хочешь решить эту задачу, либо поищи arbitrary-precision библиотеки, либо напиши свою |
мдя.. жаль. ну все равно спс.
|
Собственно сообразил решение поставленной(самому себе:) ) сферической задачи.
sum = 0.1 + 0.2;
x = prompt("0.1 + 0.2 == ?")
if(sum == x)alert("true");else alert("false");
Естественно будет не 0.3 т.к. погрешность alert(0.1 + 0.2); Зато это можно обойти так.
sum = 0.1 + 0.2;
x = prompt("0.1 + 0.2 == ?")
if(sum-0.01<x&&x<sum+0.01)alert("true");else alert("false");
Как бы создав поле допустимой погрешности. UPD Естественно если мы введем ответ 2.999999999999 то результат тоже будет true. но для ответа до одной цифры после точки решение годится. |
собственно, это одно из правил при работе с числами с плавающей запятой: не использовать оператор ==
|
UpJump,
<script>
var x = 5.4444444444444444449;
var y = 5.6785069743950934609;
var f = 2;
x = x.toFixed(f);
y = y.toFixed(f);
document.write("Первое число : "+x+"<br>");
document.write("Второе число : "+y+"<br>");
var s=Math.pow(10,f);
var result = (x*s+y*s)/s;
document.write("Сумма : "+result);
</script>
|
рони,
Это решение только для данного конкретного случая, деление тоже может дать неточный результат. Как-то так, имхо. s=0.1+0.2; alert(s) s=+s.toFixed(10) alert(s) |
Aetae,
Приведи неработающий пример для моего варианта? |
Цитата:
Впрочем, простой цикл и Math.round() сделал это за меня:
<script>
var x = 70.40234624004941;
var y = 4.785769407478535;
var f = 2;
x = x.toFixed(f);
y = y.toFixed(f);
document.write("Первое число : "+x+"<br>");
document.write("Второе число : "+y+"<br>");
var s=Math.pow(10,f);
var result = (x*s+y*s)/s;
document.write("Сумма : "+result);
</script>
<br>
<script>
var x = 9.244540723646633;
var y = 71.35153269338788;
var f = 2;
x = x.toFixed(f);
y = y.toFixed(f);
document.write("Первое число : "+x+"<br>");
document.write("Второе число : "+y+"<br>");
var s=Math.pow(10,f);
var result = (x*s+y*s)/s;
document.write("Сумма : "+result);
</script>
|
| Часовой пояс GMT +3, время: 21:16. |