double – przeniesienie części ułamkowej do części dziesiętnej

double – przeniesienie części ułamkowej do części dziesiętnej
  • Rejestracja: dni
  • Ostatnio: dni
0

chcę pomnożyć liczbę tyle razy aby część ułamkowa liczby przeniosła się do części całkowitej, ale w double na końcu liczby są jakieś drobne części ułamkowe, które blokują warunek w while'u

Kopiuj
while((double)(multiplier -Math.floor(multiplier))!=(double)0 )
        {
            
            multiplier*=10;
             
        }
jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4730
4

double nie potrafi dokładnie reprezentować ułamków dziesiętnych. nawet głupia 0.1 nie ma dokładnej reprezentacji w double.
Pogódź się z tym.
Jesli potrzebujesz ułamków dziesiętnych takich jak w kalkulatorze lub excelu to użyj BigDecimal, a nie double.
Na double generalnie nie powinno się też robić porównańtypu == i !=. Po prostu double to zwykle jakieś przybliżenie.

  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
while(  multiplier - BigDecimal.ROUND_FLOOR( multiplier) != new BigDecimal(0) )
        {
              multiplier*=10;
             
        } 


dalej nie działa
error: cannot find symbol method ROUND_FLOOR(BigDecimal)

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4730
0

A co więcej nawet się nie kompiluje. I dobrze.
Przy BigDecimal raczej całej tej pętli nie potrzebujesz.

  • Rejestracja: dni
  • Ostatnio: dni
0

kompletnie nie widzę rozwiązania, dokumentację BigDecimal przejrzałem

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4730
0

Coś w stylu:

Kopiuj
 BigDecimal tuMojaLiczba = new BigDecimal("785.212144");
        
        BigDecimal przeskalowanaDoCałkowitej = tuMojaLiczba.multiply(
                BigDecimal.TEN.pow(
                        Math.max(0,
                                tuMojaLiczba.stripTrailingZeros().scale())
                )).stripTrailingZeros();
        System.out.println(przeskalowanaDoCałkowitej);
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
 val = new BigDecimal(val, new MathContext(-3 ,RoundingMode.HALF_UP));

próbuję zaokrąglić wynik, do 3 miejsc po przecinku, ale coś robię nie tak :/

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.