自定义货币系统乘法

问题描述 投票:0回答:2

我还在学习,所以请放轻松。

我有以下货币系统:

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:上一个在乘法之前,下一个在乘法之前。

Example

如您所见,乘法本身有效,但其余的不能加到下一个较高的硬币类型上。我很高兴为您提供帮助,但对于Java来说还是很新的。

java multiplication modulo
2个回答
3
投票

[您应该只跟踪Delis的实际价值,在屏幕快照中说您拥有36053 Delis,然后您可以执行简单的操作,并且只要您显示值,就可以将其格式化为“ text wise”。

注意:如果您可以拥有大于2147483647的值,则应使用int而不是int


0
投票

如果我正在解决此问题,我会将整个价格转换为最小的硬币,然后将其翻倍,然后将其转换为所有3个硬币的价值。

话虽如此,代码的问题在于操作顺序:

de = de % 100;
da += de / 100;

您将“进位”有效地扔掉了,然后再将其添加到下一个最高面额。您需要以其他方式执行此操作:

da += de / 100; // carry first
de = de % 100;  // then reduce
© www.soinside.com 2019 - 2024. All rights reserved.