2013-07-25 69 views
5

Nếu tôi thực hiệnsự khác nhau giữa 'Float a = 3f' và 'Float a = 3.0' trong java là gì?

97346822*3f, result is 2.9204048E8, 

tuy nhiên

97346822*3.0 gives me 2.92040466E8. 

Xin giải thích.

+1

Những người khác đã trả lời câu hỏi của bạn về các kết quả khác nhau. Nhưng tôi nên lưu ý rằng _declaration_ bạn đặt trong tiêu đề, 'Float a = 3.0' (hoặc' float a = 3.0'), sẽ bị trình biên dịch từ chối vì 3.0 được coi là 'double' và nó không thích bạn buộc nó vào một biến với độ chính xác thấp hơn (không có kiểu đúc rõ ràng). – ajb

+2

Tại sao các câu hỏi trong tiêu đề và nội dung khác nhau? –

+0

Bạn cần biết rằng 'float' không giống với' Float' không giống với 'double'. Một khi bạn nhận ra rằng loại thực sự quan trọng, nó không ngạc nhiên khi các câu trả lời là khác nhau. –

Trả lời

7

Số 3.0literal representation của một giá trị double (nó tương đương với 3.0d), trong khi 3.0f là một giá trị float. Các phần khác nhau giải thích tại sao bạn nhận được kết quả khác nhau - một double được lưu trữ bằng cách sử dụng 64 bit, một float sử dụng 32 bit.

+0

3.0 là chính xác thể hiện trong cả float và double, do đó sẽ không có sự khác biệt cho trường hợp cụ thể đó. –

+2

@Patricia: Đúng, nhưng kết quả của 97346822 * 3 không chính xác được thể hiện trong phao. –

3
97346822*3.0 

sẽ được coi là double.

Dựa trên oracle tutorial

Các kiểu dữ liệu tăng gấp đôi là một điểm nổi đúp độ chính xác 64-bit IEEE 754. Phạm vi giá trị của nó nằm ngoài phạm vi của cuộc thảo luận này, nhưng được xác định trong phần Các loại Nổi, Định dạng và Giá trị của Đặc tả Ngôn ngữ Java. Đối với các giá trị thập phân, kiểu dữ liệu này thường là lựa chọn mặc định.

97346822*3f 

sẽ được coi như float.

0

Đây là những phát hiện liên quan đến this question và câu trả lời của tôi giống nhau.

Trong khi cả 3 và 3 đều có cùng giá trị khi được đưa vào giá trị dấu phẩy động, giá trị thực được sử dụng làm bộ nhớ làm việc cho thao tác dấu phẩy động. Các giá trị bên trong là một phần của phép nhân không phù hợp với giá trị dấu phẩy động và được sửa đổi, dẫn đến chênh lệch 14,0 giữa các kết quả thu được.

Các vấn đề liên quan