我还在学习,所以请放轻松。
我有以下货币系统:
3种不同的硬币,我们称它们为Rhodonite(红色),Daraen(金色)和Delis(灰色)。100熟食等于1 Daranen,100 Daranen等于1 Rhodonite。 Rhodonites没有限制。
因此,我正在尝试将该货币乘以两倍。这是我的功能:
public static Price multiply(Price price, double factor) {
int de = (int)Math.round(price.getDelis() * factor);
int da = (int)Math.round(price.getDaranen() * factor);
int r = (int)Math.round(price.getRhodoniten() * factor);
if ((de / 100) >= 1) {
de = de % 100;
da += de / 100;
}
if ((da / 100) >= 1) {
da = da % 100;
r += da / 100;
}
return new Price(r, da, de);
}
因此,当我相乘时,如果相乘的熟食大于100,则应将其添加到daranen中,而daranen和rhodonites的计数相同。
这里是一个示例,乘以因子2:上一个在乘法之前,下一个在乘法之前。
如您所见,乘法本身有效,但其余的不能加到下一个较高的硬币类型上。我很高兴为您提供帮助,但对于Java来说还是很新的。
[您应该只跟踪Delis的实际价值,在屏幕快照中说您拥有36053 Delis,然后您可以执行简单的操作,并且只要您显示值,就可以将其格式化为“ text wise”。
注意:如果您可以拥有大于2147483647的值,则应使用int而不是int
如果我正在解决此问题,我会将整个价格转换为最小的硬币,然后将其翻倍,然后将其转换为所有3个硬币的价值。
话虽如此,代码的问题在于操作顺序:
de = de % 100;
da += de / 100;
您将“进位”有效地扔掉了,然后再将其添加到下一个最高面额。您需要以其他方式执行此操作:
da += de / 100; // carry first
de = de % 100; // then reduce