Avatar billede ttn- Nybegynder
25. juli 2004 - 19:40 Der er 11 kommentarer og
1 løsning

Tal bag ved komma

Hejsa

Jeg har en opgave, hvor man skal separerer double tal = 1234.5678 i to variable - én long, hvor 1234 skal være og én short, hvor 5678 skal være. Jeg har fundet ud af, hvordan jeg får1234 i en seperat variabel, men hvordan får jeg .5678 derhen? Er der en math klasse?

Lige nu gør jeg sådan her:

        double tal = 1234.5678;
        long del1;
        short del2;
       
        del1 = (long)Math.floor(tal);
        del2 = (short) ((tal-del1)*1.0E4);
        System.out.println(del1);
        System.out.println(del2);
Avatar billede arne_v Ekspert
25. juli 2004 - 19:44 #1
Hvis det ligger fast at der altid er 4 decimaler så ville jeg bruge næsten
det samme:

double tal = 1234.5678;
long del1 = (long)tal;
short del2 = (short)((tal - del1)*10000);
Avatar billede ttn- Nybegynder
25. juli 2004 - 19:48 #2
Ja, men det er det, der er problemet. Hvad hvis jeg ændrer tallet til 1234.56789, så virker det pludselig ikke mere.

Er der ikke en anden måde at gøre det på?
Avatar billede arne_v Ekspert
25. juli 2004 - 19:51 #3
Jo.

Giv mig lige 3 minutter så kommer jeg med et eksempel.
Avatar billede arne_v Ekspert
25. juli 2004 - 19:52 #4
public class DoubleSplit {
    public static void test1(double tal) {
        long del1 = (long)tal;
        short del2 = (short)((tal - del1)*10000);
        System.out.println(del1 + " " + del2);
    }
    public static void test2(double tal) {
        long del1 = (long)tal;
        long del2 = 0;
        double tmp = tal - del1;
        int digit;
        while(tmp > 0.0000001) {
            digit = (int)(tmp * 10);
            del2 = 10 * del2 + digit;
            tmp = 10 * tmp - digit;
        }
        System.out.println(del1 + " " + del2);
    }
    public static void main(String[] args) {
        test1(1234.5678);
        test2(1234.5678);
        test1(1234.567);
        test2(1234.567);
        test1(1234.56789);
        test2(1234.56789);
    }
}
Avatar billede arne_v Ekspert
25. juli 2004 - 19:53 #5
test2 beregner selv antal cifre ved at vente indtil der kommer 6 nuller i træk.
Avatar billede ttn- Nybegynder
25. juli 2004 - 20:13 #6
Tak. Læg et svar.
Avatar billede arne_v Ekspert
25. juli 2004 - 20:14 #7
svar
Avatar billede ttn- Nybegynder
25. juli 2004 - 21:02 #8
Sådan.

Jeg fandt math klassen.

(tal-del1)*Math.pow(10.0, antalTalEfterKomma) skulle gøre det :)

Milhøj
Avatar billede arne_v Ekspert
25. juli 2004 - 21:06 #9
Ja - men skulle den ikke selv finde antal cifre efter komma ?
Avatar billede ttn- Nybegynder
25. juli 2004 - 21:12 #10
Det er jo rigtig nok, den havde jeg ikke selv tænkt på.

Men det går nok.

Takker for hjælpen. "Fortsat god sommer"
Avatar billede arne_v Ekspert
25. juli 2004 - 21:15 #11
Det er det som ligger i den while løkke jeg lavede.

Hvis du har et variabelt fast antal cifre, så kan du evt. erstatte pow med
et array:

int[] pow10 = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };
Avatar billede jacobbay Nybegynder
27. juli 2004 - 15:14 #12
Alternativt kan test2 metoden se sådan ud:

  public static void test2(double tal) {
    String talAsString = String.valueOf(tal);
    int periodIndex = talAsString.indexOf(".") != -1 ? talAsString.indexOf(".") : talAsString.length();

    long del1 = Integer.parseInt(talAsString.substring(0, periodIndex));
    long del2 = Integer.parseInt(talAsString.substring(periodIndex + 1));

    System.out.println(del1 + " " + del2);
  }

Den vil også virke hvis der er seks nuller i træk, hvis der kun er decimaler og hvis der ingen decimaler er.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester