ما هو أفضل تقنية للتعامل مع حسابات الدولار الأمريكي في بيرل؟

StackOverflow https://stackoverflow.com/questions/1269133

  •  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. وبعد سيكون هذا أكثر صعودا في منطق التطبيق وقواعد الأعمال من الميزات الحسابية لغتك.

استخدام الرياضيات :: العملة؛

لا إعادة اختراع العجلة أمر جيد :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top