不同國家有不同的貨幣流通,不同的貨幣也會有不同的價值。其實也不只貨幣,任何物品,無論實體的或是虛擬的都一樣,只要價值可以被衡量,就可以被等值換算。講到錢就傷感情,以蘋果和橘子來舉例好了,假設2顆蘋果等值於3粒橘子,那麼8顆蘋果就會等值於12粒橘子。



物品的價值

「2顆蘋果等值於3粒橘子」,我們可以說1顆蘋果的價值為#{{3 \over 2}}#粒橘子。所以#{{n}}#顆蘋果,就會等值於#{{n \times {3 \over 2}}}#粒橘子。

貨幣也是同樣的概念,假設1元#{{A}}#幣等值於1顆蘋果,再假設1元#{{B}}#幣等值於半顆蘋果,所以1元#{{A}}#幣等值於2元#{{B}}#幣,若有#{{n}}#元#{{A}}#幣就會等值於#{{2n}}#元#{{B}}#幣。

將以上的假設化為代數可列式如下:

#{{{
\text{若 n 元A幣的價值 $=$ m 元B幣的價值}
}}}#

#{{{
{{n \times \text{1元A幣的價值}} \over {m \times \text{1元B幣的價值}}} = 1
}}}#

#{{{
m = n \times {\text{1元A幣的價值} \over \text{1元B幣的價值}}
}}}#

匯率

匯率是一種貨幣兌換另一種貨幣的比率。假設現在還是一樣有#{{A}}#、#{{B}}#兩種貨幣,#{{A}}#幣對#{{B}}#幣的匯率就是:

#{{{
匯率 = {\text{1元A幣的價值} \over \text{1元B幣的價值}}
}}}#

#{{{
\text{若 n 元A幣的價值 $=$ m 元B幣的價值}
}}}#

#{{{
\begin{eqnarray}
m &=& n \times {\text{1元A幣的價值} \over \text{1元B幣的價值}} \nonumber \\
&=& n \times \text{A幣對B幣的匯率}
\end{eqnarray}
}}}#

物品的最小單位

假設2顆蘋果等值於30粒葡萄,我們可以說1顆蘋果的價值為15粒葡萄,所以#{{n}}#顆蘋果,就會等值於#{{15n}}#粒葡萄。

然而當我們實際在應用蘋果和葡萄的等值數量換算時(例如等值交換),我們想要讓蘋果總是完整的4顆一盒,而葡萄總是完整的30顆一串。在這樣的情況下,就要確保#{{n}}#是4的倍數,且#{{15n}}#是30的倍數,所以#{{n}}#要是什麼數的倍數才能夠同時符合這些條件呢?

我們可以先找出最小數量單位(4顆)的蘋果的價值,再找出最小數量單位(30顆)的葡萄的價值,取它們的最小公倍數(LCM, Least Common Multiple),就是「#{{n}}#要是什麼數的倍數」的那個數,稱它為#{{m}}#吧!#{{n}}#若是#{{m}}#的倍數,就可以同時符合蘋果和葡萄的最小數量單位。#{{m}}#的計算過程如下:

#{{{
\begin{eqnarray}
m &=& lcm(\text{蘋果的最小數量單位} \times \text{1顆蘋果的價值}, \nonumber \\
&\text{ }& \text{葡萄的最小單位} \times \text{1顆葡萄的價值}) \nonumber \\
&=& lcm({4 \times 1}, {30 \times {1 \over 15}}) \nonumber \\
&=& lcm(4, 2) \nonumber \\
&=& 4
\end{eqnarray}
}}}#

蘋果必須要是#{{m \over \text{1顆蘋果的價值}}}#的倍數;葡萄必須要是#{{m \over \text{1顆葡萄的價值}}}#的倍數。

貨幣也會有最小數量單位的問題,像是最小的美金就是1美分,相當於0.01元美金;而台幣是1元。

初步的程式實作

統整一下,要用程式做等值的貨幣或是物品的數量換算,我們會需要它們各自的價值最小數量單位。此外,還會需要做最小公倍數的運算,所以如果您不熟悉寫程式算最小公倍數的話,可以查看這篇文章:

https://magiclen.org/prime-factorization-gcd-lcm/

程式實作如下:

雖然以上程式的執行結果是正確的,但由於是使用浮點數來運算的關係,會有精準度問題,當輸入別的參數數值時可能會得到錯誤的結果。可以參考這篇文章來處理浮點數的誤差:

https://magiclen.org/float-precision/

最終的程式實作