我正在创建一个程序,其中我有3种可用货币,每种货币需要100种以前的货币。以硬币为例,我有145便士。如何将其转换为1美元,45美分或10美元钞票,1美元和45美分? 我试图将数字转换为字符串并使用由数字长度确定的substr()函数。因此,如果一个数字大于3位数,我无法弄清楚如何取第1位的子位数和最后2位,同时保持与所有长度一致。
答案 0 :(得分:2)
您可以使用modulo
,基本上找到除以100和10,000(100 * 100)的余数。
function returnCurrencies(baseCoins)
{
//Number of bigCoins can be found by subtracting the remainder of % 10000 then dividing by 10000
var bigCoins = (baseCoins - (baseCoins % 10000))/10000;
//Now take off the bigCoins from the input
baseCoins %= 10000;
//Same for medCoins, but with 100
var medCoins = (baseCoins - (baseCoins % 100))/100;
//Now take off the medCoins from the input
baseCoins %= 100;
//Whatever is left is the small coins
return [bigCoins, medCoins, baseCoins];
}
returnCurrencies(145); //[0, 1, 45]
修改强>
如果模数不清楚,我会尝试更详细地解释:
var bigCoins = (baseCoins - (baseCoins % 10000))/10000;
通过几个步骤计算大硬币的数量:
(baseCoins % 10000)
这会返回除法的余数,例如15 % 4 == 3
,这是不会制作大币的硬币数量,但是我们不会有多少钱,所以...
baseCoins - (baseCoins % 10000)
当然,这里的任何东西都可以被10,000或大量硬币整除,从而导致最后一步:
(baseCoins - (baseCoins % 10000))/10000
因为bigCoin中有10,000个baseCoins。
baseCoins %= 10000
(这只是余下部分,你也可以从bigCoins*10000
中减去baseCoins
当然,同样适用于medCoins。