在Perl中處理美元計算的最佳方法是什麼?在Perl中處理美元計算的最佳方法是什麼?
特別:以下需求而努力:
$balance = 10;
$payment = $balance/3; # Each payment should be 3.33. How best to round amount?
$balance -= $payment * 3;
# assert: $balance == .01
在Perl中處理美元計算的最佳方法是什麼?在Perl中處理美元計算的最佳方法是什麼?
特別:以下需求而努力:
$balance = 10;
$payment = $balance/3; # Each payment should be 3.33. How best to round amount?
$balance -= $payment * 3;
# assert: $balance == .01
更新時間:
假設加起來的平衡是可取的所有款項,我想出了基於the points made by 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
謝謝。我會用數學::貨幣去。 – 2009-08-13 02:32:01
一種常用的方法是做所有的計算中整數美分,然後轉換成美元和美分輸出。因此,您的10美元餘額將由1000(美分)表示,除以3表示333美元,即3.33美元。
但是,如果您希望以10美元的付款除以3,您將需要某種方式才能以3.33美元,3.33美元和美元3.34美元付款。這將取決於您的應用程序邏輯和業務規則,而不是您的語言的算術功能。
+1是的,在過去,我使用過這種技術。我想看看這些天有沒有更好的東西。數學::貨幣看起來不錯。 – 2009-08-13 02:30:52
use Math :: Currency;
不重新發明輪子是一件好事:)
應該'$ payment'是什麼,如果'$ balance'是5? – 2009-08-12 23:32:36
好點。我的回答:直到客戶告訴我如何將支付(上漲或下跌)調整到最接近的百分比。在這個具體的情況下,我想下定決心不要濫收費用。 – 2009-08-13 02:26:53
@Larry K,在這種情況下,使用[格雷格Hewgill的解決方案](http://stackoverflow.com/questions/1269133/perl-technique-for-money-calculations/1269182#1269182) – 2009-08-13 02:33:00