Perl에서 미국 달러 계산을 처리하는 가장 좋은 기술은 무엇입니까?

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

  •  13-09-2019
  •  | 
  •  

문제

Perl에서 미국 달러 계산을 처리하는 가장 좋은 기술은 무엇입니까?

특히 : 다음은 작동해야합니다.

$balance = 10;
$payment = $balance / 3; # Each payment should be 3.33. How best to round amount?
$balance -= $payment * 3;
# assert: $balance == .01
도움이 되었습니까?

해결책

보다 수학 :: 통화.

업데이트 :

잔액을 추가하는 모든 지불이 바람직하다고 가정하면 Greg Hewgill의 포인트:

#!/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.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 (센트)으로 표시되며 3으로 나누면 333 또는 $ 3.33을 제공합니다.

그러나 $ 10의 지불금을 3으로 나누려면 $ 3.33, $ 3.33의 지불로 끝나는 방법이 필요합니다. $3.34. 이것은 언어의 산술 기능보다 응용 프로그램 논리 및 비즈니스 규칙에 더 달려 있습니다.

수학 :: 통화 사용;

바퀴를 재창조하지 않는 것은 좋은 일입니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top