将数字转换为一定数量的硬币

Converting a number to an amount of coins

本文关键字:硬币 数字 转换      更新时间:2023-09-26

我正在创建一个程序,其中我有3种可用的货币,每种货币都需要前一种货币的100才能获得。以硬币为例,我有145便士。我如何将其转换为1美元、45便士,或者不转换为10美元、1美元和45便士?我尝试将数字转换为字符串,并使用由数字长度决定的substr()函数。因此,如果一个数字大于3位,我不知道如何在保持所有长度一致的情况下取第一位和最后2位的子串。

您可以使用modulo,基本上可以找到除以100和10000(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;

这通过几个步骤来计算大硬币的数量:

  1. 查找不会成为大硬币的硬币数量:

(baseCoins % 10000)

这返回除法的剩余部分,例如15 % 4 == 3,即有多少硬币不会制造大硬币,但我们不希望有多少会,所以…

  1. 从总数中减去:

baseCoins - (baseCoins % 10000)

当然,这里的任何东西都可以被10000整除,或者被大量的大硬币整除,这就是最后一步:

  1. 将这些基本硬币转换为大硬币:

(baseCoins - (baseCoins % 10000))/10000

因为一个bigCoin中有10000个baseCoin。

  1. 然后从baseCoins中拿走所有bigCoins:

baseCoins %= 10000

(这只是余数,你也可以从baseCoins中减去bigCoins*10000

当然,这同样适用于medCoins。