2015-11-15 17 views
6

Như được mô tả trong Is floating point math broken?, 0.1 + 0.2 đánh giá thành 0.30000000000000004 bằng hầu hết các ngôn ngữ lập trình.Tại sao PHP có thể tính 0.1 + 0.2 khi các ngôn ngữ khác không thành công?

Tuy nhiên, PHP, có lẽ do là tốt nhất của tất cả các ngôn ngữ lập trình, có thể tính toán 0.1 + 0.2 một cách chính xác:

php >echo 0.1 + 0.2; 
0.3 
php >var_dump(0.1 + 0.2); 
float(0.3) 

Tuy nhiên, mặc dù sản lượng hiển thị ở trên, 0,1 + 0,2 = 0,3 :

php >var_dump(0.1 + 0.2 == 0.3); 
bool(false) 

Điều gì đang xảy ra ở đây?

+2

Bạn làm tôi lol tại "PHP là tốt nhất của tất cả". Nó là một trong những phép thuật nhất, mặc dù, đó có thể là lý do tại sao nó ẩn các lỗi chính xác từ bạn, trong khi nó rõ ràng là vẫn còn đó. – GolezTrol

Trả lời

9

PHP có giá trị cấu hình precision đặt số chữ số quan trọng được hiển thị bằng số dấu phẩy động. Nó là 14 theo mặc định, đó là lý do 0.1 + 0.2 được hiển thị là 0.3.

Tuy nhiên, nếu bạn làm điều này:

ini_set('precision', 17); 
echo 0.1 + 0.2; 

bạn nhận được 0.30000000000000004

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