Hướng dẫn bignumber php - bignumber php

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:

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>

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.

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
0

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
1

Nan

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ố $a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
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ừ $a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
3, sẽ có kết quả là $a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
4. $a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
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 $a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
3
, will have a result of $a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
4
.

Bởi vì $a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
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 (). $a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
2
represents any number of different values, $a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
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

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
7

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
8

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
9

0.10

0.11

Feline tại Nospam Dot Penguin Dot irp

18 năm trước

0.12

www.sarioz.com ¶

19 năm trước

0.13

0.14

0.11

Yobberowich tại Gmail Dot Com ¶

5 năm trước

0.16

0.17

0.18

0.11

Backov tại Spotbrokers-Nospamplz Dot Com ¶

19 năm trước

0.70

0.71

0.72

0.73

0.74

0.75

0.76

0.11

Yobberowich tại Gmail Dot Com ¶

19 năm trước

0.78

0.79

floor((0.1+0.7)*10)0

floor((0.1+0.7)*10)1

floor((0.1+0.7)*10)2

0.11

Yobberowich 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.11

Backov 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

70

71

lwiwala tại gmail dot com ¶

JRF_PHP DOT NET AT NO_SPAM DOT Adviesenzo dot nl ¶

72

73

74

75

76

77

78

79

0.11

4 năm trước

Luzian ¶

81

82

83

84

85

86

87

88

16 năm trước

MagicalTux tại php dot net ¶

89

7.9999999999999991118...0

7.9999999999999991118...1

7.9999999999999991118...2

7.9999999999999991118...3

7.9999999999999991118...4

7.9999999999999991118...5

0.11

12 năm trước

rick tại ninjafoo dot com

7.9999999999999991118...7

7.9999999999999991118...8

7.9999999999999991118...9

0.11

17 năm trước

Zelko tại Mojeime Dot Com ¶

01

02

0.11

Inforsci tại gmail dot com

12 năm trước

04

05

06

Ẩn danh ¶

12 năm trước

07

08

0.11

Ẩn danh ¶

Adam H ¶

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
0

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
1

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
2

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
3

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
4

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
5

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
6

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
7

0.11

7 năm trước

Davidszilardd tại Gmail Dot Com ¶

10 năm trước

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
00

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
01

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
02

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
03

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
9

Julian L ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
04

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
05

0.11

11 năm trước

Adam H ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
07

7 năm trước

Davidszilardd tại Gmail Dot Com ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
08

10 năm trước

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
9

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
09

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
10

Julian L ¶

0.11

11 năm trước

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
9

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
13

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
14

0.11

Julian L ¶

11 năm trước

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
16

Nathanb tại php dot net ¶

Jack tại SurfaceFinishtech dot com ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
17

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
18

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
19

0.11

9 năm trước

Kjohnson tại Zootweb Dot Com ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
21

14 năm trước

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
23

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
24

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
25

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
26

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
27

0.11

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
11

Jack tại SurfaceFinishtech dot com ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
29

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
30

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
31

9 năm trước

Kjohnson tại Zootweb Dot Com ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
32

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
33

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
34

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
35

0.11

14 năm trước

12 năm trước

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
37

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
38

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
39

0.11

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
11

Julian L ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
41

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
42

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
43

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
44

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
45

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
46

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
47

0.11

11 năm trước

Adam H ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
49

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
50

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
51

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
52

7 năm trước

Jack tại SurfaceFinishtech dot com ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
53

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
54

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
55

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
56

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
11

Jack tại SurfaceFinishtech dot com ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
57

9 năm trước

Kjohnson tại Zootweb Dot Com ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
58

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
59

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
60

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
61

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
62

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
63

0.11

14 năm trước

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
9

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
65

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
66

0.11

Julian L ¶

Davidszilardd tại Gmail Dot Com ¶

10 năm trước

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
69

0.11

$a 1.23456789;
$b 1.23456780;
$epsilon 0.00001;
9

Julian L ¶

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
71

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
72

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
73

$a 1.234
$b 1.2e3
$c 7E-10;
$d 1_234.567// as of PHP 7.4.0
?>
74

0.11

Làm thế nào để xử lý các số chiều dài/chính xác tùy ý trong PHP?

Vì một số lý do, có hai thư viện tiêu chuẩn trong PHP xử lý các số chiều dài/chính xác tùy ý: BC Math và GMP.Cá nhân tôi thích GMP, vì nó tươi hơn và có API phong phú hơn.Dựa trên GMP, tôi đã triển khai lớp Decimal2 để lưu trữ và xử lý số tiền tiền tệ (như 100,25 USD).Rất nhiều tính toán mod có w/o bất kỳ vấn đề.

INT lớn nhất mà bạn có thể đại diện như một loại INT là gì?

Trên nền tảng 32 bit, INT lớn nhất mà bạn có thể biểu diễn dưới dạng loại INT là 2.147.483.647:

Điều gì xảy ra nếu tôi gọi intval () trên một chiếc phao trên php_int_max?

Gọi intval () trên một chiếc phao trên php_int_max sẽ cho kết quả cực kỳ không chính xác.