JavaScript: точност и float point
5 отговора
137 прегледа
JavaScript: точност и float point
Някой да има идея дали мога да определям точността на резултатите в JavaScript, както в нормалните езици като Паскал и Ц++?...да задам приближение, да закръглява след третия символ например?...защото големи неточности се получават при float point резултатите. Най-зле е с тригонометричните функции. Пробвайте например:
window.alert(Math.sin(Math.PI*2));
Или, казано на човешки език: sin(2п), което както знаем е 0.
JavaScript обаче ми връща: -2.4492127076447545e-16, което пак е нещо много близо и около 0, но не ми върши същата работа. Друго си е да видиш една хубава кръгла 0. Единственият начин, за който се сещам, е да си направя критерий за безкрайно малко, например: 0.000000000001 и да ceil()/floor()-вам според него...Та има ли някакъв по-добър начин?...
Математиката се състои от очевидни неща подредени по подходящ начин.
Абе dir-а кога ще си оправят бъговете при корекции, баси...хм!
window.alert(Math.sin(Math.PI*2));
Или, казано на човешки език: sin(2п), което както знаем е 0.
JavaScript обаче ми връща: -2.4492127076447545e-16, което пак е нещо много близо и около 0, но не ми върши същата работа. Друго си е да видиш една хубава кръгла 0. Единственият начин, за който се сещам, е да си направя критерий за безкрайно малко, например: 0.000000000001 и да ceil()/floor()-вам според него...Та има ли някакъв по-добър начин?...
Математиката се състои от очевидни неща подредени по подходящ начин.
Абе dir-а кога ще си оправят бъговете при корекции, баси...хм!
Редактирано от Dakota на
може нещо от сорта
<script>
function conv(val) {
if(parseFloat(val) <= Number.MIN_VALUE) return 0;
if(parseFloat(val) >= Number.MAX_VALUE) return Number.MAX_VALUE;
return parseFloat(val.toString());
}
alert(conv(Math.sin(Math.PI*2)));
alert(conv(1/1000000000000));
</script>
В посоченият от теб случай работи ... обаче в някои други,
можеш да получиш някой exception... трябва да провериш сам.
bofh
мдам
Мда, наистина върши работа...е за моя случай не ми трябва Number.MAX_VALUE, .т.е предпочитам да връща Infinity...но пък за тригонометричните функции мога да правя:
if ((1-val)<=Number.MIN_VALUE) return 1;
10x
Btw, в JavaScript има ли exception-и? :)
Математиката се състои от очевидни неща подредени по подходящ начин.
if ((1-val)<=Number.MIN_VALUE) return 1;
10x
Btw, в JavaScript има ли exception-и? :)
Математиката се състои от очевидни неща подредени по подходящ начин.
Re: мдам
Ако питаш дали можеш да правиш
try () { } catch () отговора както се сещаш е не
от друга страна NaN (Not a Number) примерно си е exception :P
Можеш да ползваш някои хубави неща, от сорта на :
var day = 33
if (day < 1 || day > 31) {
day = Number.NaN
alert("Денят трябва да е между 1 и 31")
}
както и проверката isNaN() ... говориме за твоя случай конкретно.
Айде :)
bofh
try () { } catch () отговора както се сещаш е не
от друга страна NaN (Not a Number) примерно си е exception :P
Можеш да ползваш някои хубави неща, от сорта на :
var day = 33
if (day < 1 || day > 31) {
day = Number.NaN
alert("Денят трябва да е между 1 и 31")
}
както и проверката isNaN() ... говориме за твоя случай конкретно.
Айде :)
bofh
Re: мдам
Estestweno che ima exceptioni.
Ne sym gi probwal na NS no na IE (JScript) si poddyrja kato pich try {} catch()
Taka che mogesh da gi izpolzwash, da ne goworim che ima pone 5 funkicii za prowerka na NaN i oshte takiwa gluposti, i na finala imash onError.....
Chetete malko po-usyrdno
JAVA lets make things badly and slow!!
Ne sym gi probwal na NS no na IE (JScript) si poddyrja kato pich try {} catch()
Taka che mogesh da gi izpolzwash, da ne goworim che ima pone 5 funkicii za prowerka na NaN i oshte takiwa gluposti, i na finala imash onError.....
Chetete malko po-usyrdno
JAVA lets make things badly and slow!!
:)
е аз съм чел java script reference до версия 1.2 тай че отговора ми е outdated.
a 1.4 има exceptions, прочетох преди малко.
Мерси Уили :)
bofh
a 1.4 има exceptions, прочетох преди малко.
Мерси Уили :)
bofh