Ramin Amiri
Ramin Amiri

Reputation: 161

Removing decimals from dividing

In a recent game I'm developing, I've made shops. When you buy an item and try to sell it, the selling price drops to 75% of what the buying price is. After buying an item for 154 gold pieces, It says the shop will buy for 115.5 gold pieces, but you get 115 gold pieces from selling.

I wish to remove the ".5" from "115.5" Any help is appreciated.

        int ShopValue = (int)Math.floor(getItemShopValue(removeId, 1, removeSlot));
        String ShopAdd = "";
        if (ShopValue >= 1000 && ShopValue < 1000000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000) + "k)";
        } else if (ShopValue >= 100) {
            ShopAdd = " (" + (ShopValue*.75 / 1) + " coins)";
        } else if (ShopValue >= 1000000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000000) + " million)";
        } else if (ShopValue >= 1000000000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000000000) + " billion)";
        }
        c.sM(c.getItems().getItemName(removeId)+": shop will buy for <col=255>"+ShopAdd+"</col> coins");
    }
}

Upvotes: 0

Views: 5779

Answers (5)

medvedev1088
medvedev1088

Reputation: 3745

You can use Math.floor() as others said.

Apart from that: you may have a bug in your code logic. The 3rd and the 4th branches of the if statement are unreachable as the 2nd if clause covers them

if (ShopValue >= 100)

The correct way is to arrange them such that comparisons with greater numbers comes before comparisons with smaller numbers:

      int ShopValue = (int)Math.floor(getItemShopValue(removeId, 1, removeSlot));
        String ShopAdd = "";
        if (ShopValue >= 1000000000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000000000) + " billion)";
        } else if (ShopValue >= 1000000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000000) + " million)";
        } else if (ShopValue >= 1000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000) + "k)";
        } else if (ShopValue >= 100) {
            ShopAdd = " (" + (ShopValue*.75 / 1) + " coins)";
        }  
        c.sM(c.getItems().getItemName(removeId)+": shop will buy for <col=255>"+ShopAdd+"</col> coins");
    }
}

Upvotes: 0

Eric
Eric

Reputation: 17536

You can get what you want by either:

  1. Decalring ShopAdd as an integer. This might cause other problems if you're (going to be) using ShopAdd somewhere else that needs it to be a floating point data type though.
  2. Casting ShopAdd into an int right before it's printed. This is a quick fix, and isn't that great if you plan to print ShopAdd in many places, because they'll all have to be casted.

Some example java code:

public class PrintingNumbers {
    public static void main(String[] args) {
        int i = 1;
        double d = 1;
        System.out.println("printing integer: " + i);
        System.out.println("printing double: " + d + " (not what you want)");
        System.out.println("printing casted double: " + (int) d);
    }
}

Output of above java code:

printing integer: 1
printing double: 1.0 (not what you want)
printing casted double: 1

In your case, option 1 would look something like this:

      int ShopAdd    // declare ShopAdd as an integer
      ...
      int ShopValue = (int)Math.floor(getItemShopValue(removeId, 1, removeSlot));
        String ShopAdd = "";
        if (ShopValue >= 1000000000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000000000) + " billion)";
        } else if (ShopValue >= 1000000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000000) + " million)";
        } else if (ShopValue >= 1000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000) + "k)";
        } else if (ShopValue >= 100) {
            ShopAdd = " (" + (ShopValue*.75 / 1) + " coins)";
        }  
        c.sM(c.getItems().getItemName(removeId)+": shop will buy for <col=255>"+ShopAdd+"</col> coins");
    }
}

And, option 2 would look like this:

      int ShopValue = (int)Math.floor(getItemShopValue(removeId, 1, removeSlot));
        String ShopAdd = "";
        if (ShopValue >= 1000000000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000000000) + " billion)";
        } else if (ShopValue >= 1000000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000000) + " million)";
        } else if (ShopValue >= 1000) {
            ShopAdd = " (" + (ShopValue*.75 / 1000) + "k)";
        } else if (ShopValue >= 100) {
            ShopAdd = " (" + (ShopValue*.75 / 1) + " coins)";
        }  
        // casting ShopAdd into an int when printing
        c.sM(c.getItems().getItemName(removeId)+": shop will buy for <col=255>"+(int)ShopAdd+"</col> coins");
    }
}

I hope this helps! :)

Upvotes: 1

Peter Lawrey
Peter Lawrey

Reputation: 533500

If you want an integer as a result, the simple solution is to use integer maths.

long ShopValue = (long) (getItemShopValue(removeId, 1, removeSlot))*3/4;
String ShopAdd = " (";
if (ShopValue >= 750000000) {
    ShopAdd = ShopValue / 750000000 + " billion";
} else if (ShopValue >= 1000000) {
    ShopAdd = ShopValue / 750000 + " million";
} else if (ShopValue >= 1000) {
    ShopAdd = ShopValue / 750 + "k";
} else {
    ShopAdd = ShopValue + " coins";
} 
ShopAdd += ")";

Note: your current implementation will print 800 as 0k

Upvotes: 0

msrd0
msrd0

Reputation: 8371

As Kayaman already wrote in his comment, I would just cast it to an int or to an long - This will cut of the decimals without rounding.

Upvotes: 0

stderr
stderr

Reputation: 8722

I would just use Math.floor.

        int ShopValue = (int)Math.floor(getItemShopValue(removeId, 1, removeSlot));
        String ShopAdd = "";
        if (ShopValue >= 1000 && ShopValue < 1000000) {
            ShopAdd = " (" + Math.floor(ShopValue*.75 / 1000) + "k)";
        } else if (ShopValue >= 100) {
            ShopAdd = " (" + Math.floor(ShopValue*.75 / 1) + " coins)";
        } else if (ShopValue >= 1000000) {
            ShopAdd = " (" + Math.floor(ShopValue*.75 / 1000000) + " million)";
        } else if (ShopValue >= 1000000000) {
            ShopAdd = " (" + Math.floor(ShopValue*.75 / 1000000000) + " billion)";
        }
        c.sM(c.getItems().getItemName(removeId)+": shop will buy for <col=255>"+ShopAdd+"</col> coins");
    }
}

If you wanted to be a little more generous to your players you might use Math.ceil instead ;-)

Upvotes: 2

Related Questions