Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]zaokrąglanie do określonej liczby miejsc po przecinku
Forum PHP.pl > Forum > Przedszkole
neo1986kk
Witam jak zaokrąglić wynik do 2 miejsc po przecinku?
W ogole dlaczego wg javascript

3*1.9= 5.699999999999999999999999999.... a nie 5.7?

  1. document.getElementById('wartosc').value = parseFloat(document.getElementById('ilosc').value) * parseFloat(document.getElementById('cena').value);


Pozdrawiam:)
zegarek84
tutaj masz wszystko napisane co i jak oraz przy okazji wyjaśnione te "kwiatki":
http://www.doman.art.pl/kursjs/kurs/math.html
230005
Miałem identyczny problem i zdaje się ktoś z tego forum zapodał link do tej funkcji:

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. function fixstr(num) {
  3. var numv=num-0;
  4. var sign=(numv>=0?1:-1);
  5. var numabs=numv*sign;
  6. var naint=Math.floor(numabs);
  7. var nacent=Math.round((numabs-naint)*100);
  8. if (nacent>=100) {nacent=0; naint++;}
  9. var nais=''+naint;
  10. var nacs=(nacent<10?'0':'')+nacent;
  11. if (naint+nacent==0) sign=1;
  12. return (sign==1?'':'-')+nais+'.'+nacs;
  13. }
  14.  
[JAVASCRIPT] pobierz, plaintext


Działa bez zarzutu, a błąd wynika z buga precyzji silnika js w niektórych przeglądarkach. Ciekawe, że w ie nie ma tego problemu.
neo1986kk
No właśnie, wszystko ok tylko jak to zrobić na moich "value"
Wymyśliłem coś takiego ale nie działa:(
  1. function cena()
  2. {
  3. reg = /^[0-9.]{1,8}$/;
  4. wyn = document.getElementById('cena').value.match(reg);
  5.  
  6. wynw = parseFloat(document.getElementById('ilosc').value) * Math.round(wyn*Math.pow(10,2))/Math.pow(10,2);
  7. document.getElementById('wartosc').value = Math.round(wynw*Math.pow(10,2))/Math.pow(10,2);


sorry, sorry

działa wszystko jak należy, mialem jeszcze jedną pętle w pętli, której nie zmieniłem
teraz jest wszystko ok
poli25

function fixstr(num) {
var numv=num-0;
var sign=(numv>=0?1:-1);
var numabs=numv*sign;
var naint=Math.floor(numabs);
var nacent=Math.round((numabs-naint)*100);
if (nacent>=100) {nacent=0; naint++;}
var nais=''+naint;
var nacs=(nacent<10?'0':'')+nacent;
if (naint+nacent==0) sign=1;
return (sign==1?'':'-')+nais+'.'+nacs;
}ta funkcja nie działa za dobrze moze dla rownych kwot owszem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.