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

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

while((double)(multiplier -Math.floor(multiplier))!=(double)0 )
        {
            
            multiplier*=10;
             
        }
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.

0
while(  multiplier - BigDecimal.ROUND_FLOOR( multiplier) != new BigDecimal(0) )
        {
              multiplier*=10;
             
        } 


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

0

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

0

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

0

Coś w stylu:

 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);
0
 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 :/

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