Ben bir MySQL veritabanı üstünde PHP yazılmış eski kod büyük bir yığın miras. Fark ettiğim şey, uygulamanın doubles
verilerin depolanması ve işlenmesi için kullandığı .
Şimdi double
, yuvarlama hataları nedeniyle parasal operasyonlar için nasıl uygun olmadığını belirten çok sayıda gönderiyle karşılaştım. Ancak, henüz parasal değerlerin PHP kodunda ele alınması ve bir MySQL veritabanında saklanması için tam bir çözümle karşılaşmadım.
Özellikle PHP'de para işleme konusunda en iyi uygulama var mı?
Aradığım şeyler:
- Veriler veritabanında nasıl saklanmalıdır? sütun türü? boyut?
- Veriler normal toplama, çıkarma işlemlerinde nasıl olmalıdır? çarpma veya bölme?
- Değerleri ne zaman yuvarlamalıyım? Varsa ne kadar yuvarlama kabul edilebilir?
- Büyük parasal değerlerle düşük değerlerin ele alınması arasında bir fark var mı?
Not: Bir ÇOK I (. Çeşitli güvenlik kaygıları basitleştirme için gözardı edildi gerçek hayatta Elbette böyle kodumu kullanmak asla) günlük yaşamda para değerleri karşılaşabileceğiniz nasıl örnek kod basitleştirilmiş:
$a= $_POST['price_in_dollars']; //-->(ex: 25.06) will be read as a string should it be cast to double?
$b= $_POST['discount_rate'];//-->(ex: 0.35) value will always be less than 1
$valueToBeStored= $a * $b; //--> any hint here is welcomed
$valueFromDatabase= $row['price']; //--> price column in database could be double, decimal,...etc.
$priceToPrint=$valueFromDatabase * 0.25; //again cast needed or not?
Umarım bu örnek kodu daha fazla kullanım durumu ortaya çıkarmak ve elbette tam anlamıyla almamak için bir araç olarak kullanırsınız.
Bonus Soru Doktrin veya PROPEL gibi bir ORM kullanacaksam, kodumda para kullanmak ne kadar farklı olacak.
decimal
C # 'daki tipin kesinliği sınırlıdır, ancak parasal değerler için mükemmeldir.