Zaokrąglanie do dwóch miejsc po przecinku zawsze w górę

Odpowiedz Nowy wątek
2019-02-08 22:18
0

Cześć,
Pewnie pytanie dla wielu z Was wyda się banalne ale ja przyznam się bez bicia, poległem. Muszę zaokrąglić liczbę do 2 miejsc po przecinku z tym że zaokrąglenie zawsze musi być w górę. Dla przykładu, mam sobie wartość zmienno przecinkową: 123.914. Wywołując na niej metodę toFixed(2) otrzymam zaokrąglenie do wartości 123.91. Z matematycznego punktu widzenia jest to jak najbardziej prawidłowe i nie ma co się czepiać. Natomiast w moim przypadku nie mogę tego tak zrobić. Oczekiwanie jest aby zaokrąglenie było do wartości 123,92 a nie 91. I teraz zastanawiam się, czy jest jakaś gotowa metoda która w ten sposób to zrobi czy muszę rzeźbić coś swojego. Pomóżcie proszę.

Pozostało 580 znaków

2019-02-08 22:51
Math.ceil(123.914 * 100) / 100;

Pozostało 580 znaków

2019-02-08 23:00
0

Chyba, że czegos nie dostrzegam, ale toFixed daje taki efekt.
https://www.w3schools.com/jsref/jsref_tofixed.asp


edytowany 1x, ostatnio: lion137, 2019-02-08 23:02

Pozostało 580 znaków

2019-02-08 23:09
0
lion137 napisał(a):

Chyba, że czegos nie dostrzegam, ale toFixed daje taki efekt.
https://www.w3schools.com/jsref/jsref_tofixed.asp

Nie. Nie daje. Zaokrąglenie da 123.91, zamiast 123.92.

Pozostało 580 znaków

2019-02-08 23:13
2

Rzeczywiście, ale w tym rozwiązaniu, jeszcze nie wszystko stracone, jakby dodać, 0.005 do 123.91, to toFixed(2) zwróci co trzeba.


edytowany 1x, ostatnio: lion137, 2019-02-08 23:14

Pozostało 580 znaków

2019-02-08 23:29
0
lion137 napisał(a):

Rzeczywiście, ale w tym rozwiązaniu, jeszcze nie wszystko stracone, jakby dodać, 0.005 do 123.91, to toFixed(2) zwróci co trzeba.

To jest jeszcze mniej czytelne niż z mnożeniem przez potęgę liczby 10, a potem dzieleniem przez nią^^

Pozostało 580 znaków

2019-02-09 10:56
1

To jest jeszcze mniej czytelne

Pytanie - czy działa zgodnie z oczekiwaniami :P


That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say

Pozostało 580 znaków

2019-02-09 18:45
0

Dzięki @serek. Dokładnie o coś takiego chodziło.

Pozostało 580 znaków

2019-02-19 15:00
0

Cześć Panowie. Jednak nie do końca mi coś działa. Owszem, przykład z pierwszego mojego posta jest ok i działa ale dziś trafiłem na przypadek gdzie to nie zadziałało. Wartość 4129.64. Proste działanie i proste dzielenie na 2 ponieważ powinno zwrócić równo: 2064,84. Ale niestety:

Math.ceil((4129.64 / 2) * 100) / 100

zwraca mi 2064.83 :(.

edytowany 1x, ostatnio: lukpio3, 2019-02-19 15:00
Zwróć uwagę na nawiasy :) - Bogu 2019-02-19 15:05

Pozostało 580 znaków

2019-02-19 16:35
0

Czyli jaki algorytm masz zrealizować?
Sprecyzuj algorytm, a potem go zapisz.
Twój algorytm jest taki -

  1. Odrzucam wszystko od trzeciego miejsca po przecinku
  2. Dodaję 0.01, chyba że? (że to co odrzuciłem było zerem).

Tak ma to działać?


Pozostało 580 znaków

2019-02-19 16:49
0

Algorytm jest prosty. Mam pewną liczę którą muszę podzielić na 2 i zaokrąglić do dwóch miejsc po przecinku z tym warunkiem że zawsze ma zaokrąglać w górę. Czyli jeżeli mam np liczbę: 247.828 która po podzieleniu na 2 da nam 123,914 to ma mi zaokrąglić do liczby 123.92 a nie 123.91. I generalnie ta funkcja Math.ceil((247.828 / 2) * 100) / 100 działa. Ale dziś właśnie natrafiłem na przypadek gdzie dzielenie było proste ponieważ wychodziły równiutkie dwie części (4129.64) a ja dostałem zamiast 2064,82, wartość 2064,83 i tu jest błąd ponieważ jeżeli liczbę da się podzielić równo na dwie części to nie ma tu czego zaokrąglać w górę bo i po co. Zaokrąglanie powinno zadziałać tylko jeżeli po dzieleniu wychodzi jakaś wartość z większą ilością miejsc po przecinku albo jeżeli dzielę jakąś liczbę z większą ilością miejsc po przecinku. Tu akurat było prosto ponieważ dzieliłem na 2 liczbę z dwoma miejscami po przecinku która dzieliła się ładnie na dwie równe części.

edytowany 1x, ostatnio: lukpio3, 2019-02-19 16:50

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0