2010-09-26 46 views
9

Tôi có một bảng items trong cơ sở dữ liệu MySQL của tôi với trường DECIMAL(10,2) được gọi là price.Làm việc với tiền (số thập phân) trong PHP được coi là an toàn?

Khi tìm nạp các giá trị này, có an toàn để thực hiện các phép tính và như vậy với các số này trong PHP không? Hoặc tôi sẽ kết thúc với các lỗi làm tròn tiềm năng và những thứ như vậy mà là phổ biến khi làm việc với các loại dữ liệu dấu chấm động?

PHP xử lý những thứ này như thế nào sau trang bìa? Có an toàn để tính toán tiền với PHP không?

+0

PHP Pet Peeve # 1329: Không có kiểu dữ liệu 'thập phân'. AFAIK, đằng sau hậu trường, PHP sẽ sử dụng số học dấu chấm động (thở hổn hển). Sau đó, có, bạn sẽ phải đối mặt với [làm tròn lỗi] (http://stackoverflow.com/questions/3726721/php-math-precision/3726761#3726761). – NullUserException

+0

Không có ý tưởng về php, nhưng bạn nên được tốt hơn chỉ bằng cách sử dụng số nguyên. Thật dễ dàng để chuyển đổi từ xu sang đô la (hoặc bất kỳ thứ gì) nếu cần sau này. – CurtainDog

+0

Bạn có thể dựa vào MySQL để tính toán và PHP chỉ để hiển thị không? – Xailor

Trả lời

8

Bạn có thể sử dụng một thư viện PHP mà không độc đoán chính xác toán học, chẳng hạn như BC Math hoặc GMP.

Trong khi sử dụng đồng xu, hoặc đơn vị tiền tệ nhỏ nhất có thể hoạt động đôi khi, điều gì sẽ xảy ra nếu bạn gặp phải tình huống mà bạn phải đối phó với phân số cent? Ví dụ, nếu bạn đang đối phó với việc bán và mua cổ phiếu, bạn phải có độ chính xác cao hơn chỉ là xu. Trong những tình huống như thế này, bạn phải sử dụng phép tính chính xác tùy ý.

+1

+1 để đề cập đến các trường hợp cạnh mà giao dịch với xu một mình sẽ không hoạt động – alex

10

Hầu hết mọi người đo lường đơn vị tiền tệ theo mệnh giá nhỏ nhất trong PHP - ví dụ: $ 10 AU đô la sẽ được hiển thị là 1000 xu.

Sau đó, nó không đáng kể để / 100 để nhận được đô la và bạn sẽ không nhận được ví dụ: 4.9999999 giá trị do số học dấu phẩy động.

Hoặc, bạn có thể sử dụng dấu phẩy động và làm tròn tới giá trị cent nhỏ nhất gần nhất (có thể là bội số của 5, ví dụ).

Dường bạn đã biết về nó, nhưng đối với những người khác, this is still required reading :)

+1

Câu trả lời đúng và ngôn ngữ bất khả tri tại đó –

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