Số điểm nổi [còn được gọi là "phao", "nhân đôi" hoặc "số thực"] có thể được chỉ định bằng cách sử dụng bất kỳ cú pháp nào sau đây:
Chính thức kể từ Php 7.4.0 [trước đây, không được phép nhấn mạnh]:
LNUM [0-9]+[_[0-9]+]* DNUM [[0-9]*[_[0-9]+]*[\.]{LNUM}] | [{LNUM}[\.][0-9]*[_[0-9]+]*] EXPONENT_DNUM [[{LNUM} | {DNUM}] [eE][+-]? {LNUM}]
Kích thước của một chiếc phao phụ thuộc vào nền tảng, mặc dù tối đa khoảng 1,8E308 với độ chính xác khoảng 14 chữ số thập phân là một giá trị phổ biến [định dạng IEEE 64 bit].
Cảnh báo
Độ chính xác điểm nổi
Số điểm nổi có độ chính xác hạn chế. Mặc dù nó phụ thuộc vào hệ thống, PHP thường sử dụng định dạng độ chính xác kép của IEEE 754, điều này sẽ gây ra lỗi tương đối tối đa do làm tròn theo thứ tự 1.11e-16. Các hoạt động số học không cơ bản có thể gây ra các lỗi lớn hơn, và tất nhiên, việc lan truyền lỗi phải được xem xét khi một số hoạt động được kết hợp.
Ngoài ra, các số hợp lý có thể thể hiện chính xác là số điểm nổi trong cơ sở 10, như 0.1
hoặc 0.7
, không có biểu diễn chính xác như số điểm nổi trong cơ sở 2, được sử dụng bên trong, bất kể kích thước của mantissa. Do đó, chúng không thể được chuyển đổi thành các đối tác nhị phân bên trong mà không mất độ chính xác nhỏ. Điều này có thể dẫn đến kết quả khó hiểu: ví dụ, floor[[0.1+0.7]*10]
thường sẽ trả lại 7
thay vì dự kiến 8
, vì biểu diễn nội bộ sẽ giống như 7.9999999999999991118...
.
Vì vậy, không bao giờ tin tưởng kết quả số nổi vào chữ số cuối cùng và không so sánh số điểm nổi trực tiếp cho sự bình đẳng. Nếu độ chính xác cao hơn là cần thiết, các hàm toán học chính xác tùy ý và các hàm GMP có sẵn.
Để biết lời giải thích "đơn giản", hãy xem hướng dẫn điểm nổi »& nbsp; có tiêu đề" Tại sao don don số của tôi cộng lại? "
Chuyển đổi thành Float
Từ chuỗi
Nếu chuỗi là số hoặc số dẫn thì nó sẽ giải quyết thành giá trị float tương ứng, nếu không nó được chuyển đổi thành 0 [0
].
Từ các loại khác
Đối với các giá trị của các loại khác, chuyển đổi được thực hiện bằng cách chuyển đổi giá trị thành int trước và sau đó để nổi. Xem Chuyển đổi sang số nguyên để biết thêm thông tin.int first and then to float. See Converting to integer for more information.
Ghi chú::
Vì một số loại có hành vi không xác định khi chuyển đổi sang INT, đây cũng là trường hợp khi chuyển đổi thành float.int, this is also the case when converting to float.
So sánh phao
Như đã lưu ý trong cảnh báo ở trên, thử nghiệm các giá trị điểm nổi cho sự bình đẳng là có vấn đề, do cách chúng được thể hiện trong nội bộ. Tuy nhiên, có nhiều cách để so sánh các giá trị điểm nổi hoạt động xung quanh những hạn chế này.
Để kiểm tra các giá trị điểm nổi cho sự bình đẳng, giới hạn trên trên lỗi tương đối do làm tròn được sử dụng. Giá trị này được gọi là Epsilon máy, hoặc vòng tròn đơn vị, và là sự khác biệt nhỏ nhất có thể chấp nhận được trong các tính toán.
$ a và $ b bằng 5 chữ số của độ chính xác.
0
1Nan
Một số hoạt động số có thể dẫn đến một giá trị được biểu thị bởi hằng số
2. Kết quả này đại diện cho một giá trị không xác định hoặc không thể hiện được trong các tính toán dấu phẩy động. Bất kỳ so sánh lỏng lẻo hoặc nghiêm ngặt của giá trị này so với bất kỳ giá trị nào khác, bao gồm cả chính nó, nhưng ngoại trừ
3, sẽ có kết quả là
4.
2. This result
represents an undefined or unrepresentable value in floating-point calculations. Any loose or strict comparisons of this value against any other value, including itself, but except
3, will have a result of
4.
Bởi vì
2 đại diện cho bất kỳ số lượng giá trị khác nhau nào, không nên so sánh với các giá trị khác với các giá trị khác, và thay vào đó nên được kiểm tra sử dụng is_nan [].
2 represents any number of different values,
2 should not be compared to other values, including itself, and instead should be checked for using
is_nan[].
catalin dot lungraru tại gmail dot com ¶ ¶
8 năm trước
7
8
9
0.1
0
0.1
1Feline tại Nospam Dot Penguin Dot irp ¶
18 năm trước
0.1
2
www.sarioz.com ¶ ¶
19 năm trước
0.1
3
0.1
4
0.1
1Yobberowich tại Gmail Dot Com ¶ ¶
5 năm trước
0.1
6
0.1
7
0.1
8
0.1
1Backov tại Spotbrokers-Nospamplz Dot Com ¶ ¶
19 năm trước
0.7
0
0.7
1
0.7
2
0.7
3
0.7
4
0.7
5
0.7
6
0.1
1Yobberowich tại Gmail Dot Com ¶ ¶
19 năm trước
0.7
8
0.7
9
floor[[0.1+0.7]*10]
0
floor[[0.1+0.7]*10]
1
floor[[0.1+0.7]*10]
2
0.1
1Yobberowich tại Gmail Dot Com ¶ ¶
5 năm trước
floor[[0.1+0.7]*10]
4
floor[[0.1+0.7]*10]
5
floor[[0.1+0.7]*10]
6
0.1
1Backov tại Spotbrokers-Nospamplz Dot Com ¶ ¶
James Dot Cridland tại Virginradio Dot Co Dot Uk ¶
floor[[0.1+0.7]*10]
8
floor[[0.1+0.7]*10]
9
7
0
7
1
7
2
7
3
7
4
7
5
0.1
1lwiwala tại gmail dot com ¶ ¶
Luzian ¶
7
7
7
8
7
9
0.1
116 năm trước ¶
Zelko tại Mojeime Dot Com ¶
8
1
8
2
8
3
8
411 năm trước ¶
JRF_PHP DOT NET AT NO_SPAM DOT Adviesenzo dot nl ¶
8
5
8
6
8
7
8
8
8
9
7.9999999999999991118...
0
7.9999999999999991118...
1
7.9999999999999991118...
24 năm trước ¶
MagicalTux tại php dot net ¶
7.9999999999999991118...
3
7.9999999999999991118...
4
7.9999999999999991118...
5
7.9999999999999991118...
6
7.9999999999999991118...
7
7.9999999999999991118...
8
7.9999999999999991118...
9
0.1
112 năm trước ¶
rick tại ninjafoo dot com
0
1
0
2
0.1
1Ẩn danh ¶ ¶
12 năm trước
0
4
0
5
0.1
1Adam H ¶ ¶
8 năm trước
0
7
0
8
0
9
00
Julian L ¶ ¶
11 năm trước
01
02
0.1
1Jack tại SurfaceFinishtech dot com ¶ ¶
9 năm trước
04
Inforsci tại gmail dot com ¶
12 năm trước
05
06
07Adam H ¶ ¶
8 năm trước
08
09
10
0.1
1Davidszilardd tại Gmail Dot Com ¶ ¶
8 năm trước
12
13
0.1
1Davidszilardd tại Gmail Dot Com ¶ ¶
10 năm trước
15
Julian L ¶ ¶
11 năm trước
16
Jack tại SurfaceFinishtech dot com ¶ ¶
9 năm trước
17
18
19Inforsci tại gmail dot com ¶
9 năm trước
20
21
22
0.1
1Inforsci tại gmail dot com ¶
Kjohnson tại Zootweb Dot Com ¶
24
25
26
27
28
29
30
0.1
114 năm trước ¶
11 năm trước
32
33
34
35
36
37
38
0.1
1Jack tại SurfaceFinishtech dot com ¶ ¶
9 năm trước
40
41
42
43
0.1
1Inforsci tại gmail dot com ¶
12 năm trước
45
46
47
0.1
1Kjohnson tại Zootweb Dot Com ¶ ¶
11 năm trước
49
50
51
52Jack tại SurfaceFinishtech dot com ¶ ¶
9 năm trước
53
54
55
56Jack tại SurfaceFinishtech dot com ¶ ¶
9 năm trước
57
Inforsci tại gmail dot com ¶
Kjohnson tại Zootweb Dot Com ¶
58
59
60
61
62
63
0.1
114 năm trước ¶
m dot lebkowski+php tại gmail dot com ¶
65
66
0.1
1Dev tại Duy trì Dot Com ¶ ¶
11 năm trước
68
69
0.1
1Jack tại SurfaceFinishtech dot com ¶ ¶
9 năm trước
71
72
73
74
0.1
1