Nasıl güvenli PHP para ile ilgili hesaplamalar yapabilirim?

3 Cevap php

Ben biraz para değerlerinin bazı temel hesaplamalar yapmak için gereken birkaç rapor çıktı komut üzerinde çalışıyorum.

Ancak giriş değerleri bir ondalık biçiminde tüm vardır, bu amaç için kayan nokta aritmetik sınırlarının farkında değilim, bu yüzden onlara aritmetik operatörlerini kullanırsanız PHP yüzer onları döküm olacaktır.

Yani numaralarını işlemek için en iyi yolu nedir? Ben kullanmalı mıyım BCMath? . NET'te Decimal benzer bir şey var mı? Ya da ben int geri döküm eğer aritmetik operatörleri kullanmak güvenli mi?

3 Cevap

(154c): sent iş, (1,54 $) Dolar çalışmaz. Eğer bir yüzde fraksiyonları önemli görevleri yerine gerekir sürece, o zaman tamsayılar çalışma olacak ve tüm iyi. Eğer bir yüzde onda istiyorsanız, o zaman sadece on her şeyi çarpın!

Eğer tüm değerler sonucu bir dize olacak gibi, dizeleri saklanır ve dizeleri gibi işlevleri geçilecek BCMath kullanın. Yani, herhangi bir döküm yapmak ama işlevine verilen sayı değeri sayısal bir değer olduğundan emin gerekmez. Şahsen, ondalık tarafta matematik kesinlik requires, yüksek miktarda sonra BCMath kullanırsanız.

Eğer ("normal kişi") makul miktarlarda çalışıyorsanız, kayan nokta kullanarak sadece oldukça, diyelim ki, faiz hesaplamalarını yaparak daha tutarları ekleme ve çıkarma, özellikle eğer bir sorun olması muhtemel değildir.

Eğer hızlı bir düzeltme arıyorsanız, tamsayı geçiş size yardımcı olmak için olası değildir; Hala taşma ile uğraşmak zorunda. Keyfi uzunluğu tamsayılar (PHP tamsayı türü sınırlarının ötesinde bir sayı karşılaşırsa, o interpreted as a float instead olacaktır. Ama sonra geri kayan nokta kullanarak orijinal sorununa demektir! Söz burada düzenlenemez Birisi) (Bu sayfada belirtilen GMP) yardımcı olabilir.)

Temel olarak, bir yarım-yamalak bir şekilde bunu yaparken çoğu durumda çalışır, ve ucuz; doğru yapıyor ciddi bir ağrıdır. Benim önerim bir iş sorun olarak bakmaktır: Birisi bir kuruş eksik şikayet ediyorsa, onlara bir dolar vermek, ve bunu yaparak daha fazla dolar tasarruf için gidiyoruz kadar gerçek bir çözüm başlayan zahmet etmeyin.