Цитата:
в финансовых вычислениях, например, используется 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, время: 02:39. |