Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Błędne zaokrąglenie, W jaki sposób poprawnie zaokrąglać wynik?
maston
post 5.04.2013, 10:56:10
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 12.08.2005

Ostrzeżenie: (0%)
-----


Witam.

Mam taki oto skrypt :
  1. function Round(Number) {
  2. return (Math.round(parseFloat(Number) * 1000) / 1000).toFixed(2);
  3. }
  4. var value = '587.175';
  5. document.writeln(Round(value));
  6. document.writeln(parseFloat(parseFloat(value).toFixed(2)));


Poprawny wynik powinien wynosić 587.18

Nie wiem dlaczego Js pokazuje mi uparcie 587.17

Spotkał się już ktoś może z takim przypadkiem? Podejrzewam, że ma to związek z arytmetyką bitów liczb zmiennoprzecinkowych... ale czy idzie to jakoś "naprawić"?

Dzięki z góry smile.gif
Go to the top of the page
+Quote Post
skowron-line
post 5.04.2013, 10:59:37
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


http://floating-point-gui.de/errors/rounding/ zerknij tutaj


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
maston
post 5.04.2013, 12:56:26
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 12.08.2005

Ostrzeżenie: (0%)
-----


dzięki smile.gif

pomogło użycie BigDecimal smile.gif

  1. new BigDecimal("587.175").setScale(2, BigDecimal.prototype.ROUND_HALF_UP)


wyświetla 587.18 smile.gif

Ten post edytował maston 5.04.2013, 12:56:54
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 02:54