2013-07-25 12 views
5

Gdybym wykonaćJaka jest różnica między "Float a = 3f" i "Float a = 3.0" w Javie?

97346822*3f, result is 2.9204048E8, 

jednak

97346822*3.0 gives me 2.92040466E8. 

proszę wyjaśnić.

+1

Inni odpowiedzieli na twoje pytanie dotyczące różnych wyników. Należy jednak zauważyć, że deklaracja _ umieszczona w tytule, Float a = 3.0 (lub float a = 3.0), zostanie odrzucona przez kompilator, ponieważ 3.0 jest traktowany jako 'double' i nie lubi wymuszasz na zmiennej o mniejszej precyzji (bez wyraźnego rzutowania). – ajb

+2

Dlaczego pytania w tytule i treści są inne? –

+0

Musisz wiedzieć, że 'float' nie jest tym samym, co' Float', który nie jest tym samym, co 'double'. Kiedy zdasz sobie sprawę, że typ rzeczywiście ma znaczenie, nie jest zaskoczeniem, że odpowiedzi są różne. –

Odpowiedz

7

Numer 3.0 jest literal representation o wartości double (jest to równoważne 3.0d), natomiast 3.0f jest wartością float. Różne szczegóły wyjaśniają, dlaczego uzyskujesz różne wyniki - plik double jest zapisywany przy użyciu 64-bitów, a float używa 32-bitów.

+0

3.0 jest dokładnie przedstawiany zarówno w float, jak i double, więc nie będzie różnicy dla tego konkretnego przypadku. –

+2

@ Patricia: Prawidłowo, ale wynik 97346822 * 3 nie jest dokładnie reprezentowany w float. –

3
97346822*3.0 

będzie traktowany jako double.

podstawie oracle tutorial

Podwójna typu danych jest podwójnej precyzji 64-bitowe zmiennoprzecinkowe IEEE 754. Jego zakres wartości wykracza poza zakres tej dyskusji, ale jest określony w sekcji Floating-Point Types, Formats i Values ​​w specyfikacji języka Java. W przypadku wartości dziesiętnych ten typ danych jest zwykle domyślnym wyborem.

97346822*3f 

będą traktowane jako float.

0

Są to ustalenia związane z this question i moja odpowiedź na to samo.

Podczas gdy wartości 3,0 i 3f mają tę samą wartość po wprowadzeniu do wartości zmiennoprzecinkowych, rzeczywistą wartość wykorzystuje się jako pamięć roboczą dla operacji zmiennoprzecinkowej. Wewnętrzne wartości, które są częścią mnożenia, same w sobie nie pasują do wartości zmiennoprzecinkowych i są modyfikowane, co powoduje różnicę między uzyskanymi wynikami o 14,0.

Powiązane problemy