ما هو أفضل تقنية للتعامل مع حسابات الدولار الأمريكي في بيرل؟
-
13-09-2019 - |
سؤال
ما هو أفضل تقنية للتعامل مع حسابات الدولار الأمريكي في بيرل؟
خاصة: الاحتياجات التالية للعمل:
$balance = 10;
$payment = $balance / 3; # Each payment should be 3.33. How best to round amount?
$balance -= $payment * 3;
# assert: $balance == .01
المحلول
يرى الرياضيات :: العملة.
محدث:
على افتراض أن جميع المدفوعات التي تزيد الوصول إلى الرصيد أمر مرغوب فيه، فقد وصلت إلى البرنامج النصي التالي بناء على النقاط التي أدلى بها جريج هيوجل:
#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw( sum );
my @balances = (10, 1, .50, 5, 7, 12, 3, 2, 8, 1012);
for my $balance (@balances) {
my @stream = get_payment_stream($balance, 3);
my $sum = sum @stream;
print "$balance : @stream : $sum\n";
}
sub get_payment_stream {
my ($balance, $installments) = @_;
$balance *= 100;
my $payment = int($balance / $installments);
$installments -= 1;
my $residual = $balance - int($payment * $installments);
my @stream = (($payment) x $installments, $residual);
return map { sprintf '%.2f', $_ / 100} @stream;
}
انتاج:
C: TEMP> P 10: 3 3.33 3.33 3.34: 10 1: 0.33 0.33 0.34: 1 0.5: 0.16 0.16 0.18: 0.5 5: 1.66 1.66 1.68: 5 7: 2.33 2.33 2.34: 7 12: 4.00 4.00 4.00: 12 3: 1.00 1.00 1.00: 3 2: 0.66 0.66 0.68: 2 8: 2.66 2.66 2.68: 8 1012: 337.33 337.33 337.34: 1012
نصائح أخرى
إحدى هذه التقنيات المشتركة هي القيام بكل الحسابات في سنتا عددا صحيحا, ، ثم تحويل إلى الدولارات والسنتات للإخراج. لذلك سيتم تمثيل رصيدك 10 دولارات بمقدار 1000 (سنتات)، وتقسيمه من قبل ثلاثة يعطي 333، أو 3.33 دولار.
ومع ذلك، إذا كنت ترغب في تقسيم دفعة 10 دولارات من قبل ثلاثة، فستحتاج إلى طريقة في نهاية المطاف بدفع مدفوعات قدرها 3.33 دولار و 3.33 دولار و $3.34. وبعد سيكون هذا أكثر صعودا في منطق التطبيق وقواعد الأعمال من الميزات الحسابية لغتك.
استخدام الرياضيات :: العملة؛
لا إعادة اختراع العجلة أمر جيد :)