我得到了:
int number = 1255; -> //It could also be 125(1€25Cent) or 10(10Cent) or 5(5Cent)
public double toMoney(int number)
{
...
}
作为回报,我想要双号: 12.55 或输入:10然后: 00.10
我知道我可以使用Modulo这样的事情:
1255%100 ..得到55 ..但如何做到12和最后,如何 形成一个双重?
答案 0 :(得分:5)
该方法不应该存在,因为它无法给出正确的结果。
因为在内部,double
是一种格式(二进制浮点),无法准确表示像0.1,0.2或0.3 这样的数字。有关详细信息,请阅读Floating-Point Guide。
如果您需要小数,则输出格式应为BigDecimal
或String
。
答案 1 :(得分:4)
应该通过使用NumberFormat类来完成打印金额的方式!
看看这个例子:
NumberFormat format = NumberFormat.getCurrencyInstance(Locale.FRANCE);
format.setCurrency(Currency.getInstance("EUR"));
System.out.println( format.format(13234.34) );
打印此输出:
13 234,34 €
您可以尝试不同的区域设置和货币代码。请参阅文档:http://download.oracle.com/javase/1.4.2/docs/api/java/text/NumberFormat.html。
答案 2 :(得分:3)
如果我正确理解你的问题,你可能只想这样做:
return (double)number / 100.;
虽然有一句警告: 由于四舍五入问题,您不应该使用浮点数。
如果您只想以货币格式打印数字,这是一种100%安全的方法:
System.out.print((number / 100) + ".");
int cents = number % 100;
if (cents < 10)
System.out.print("0");
System.out.println(cents);
这可能会更好地简化......当然你可以选择BigDecimal,但IMO用大锤粉碎蚂蚁。
答案 3 :(得分:2)
public double toMoney(int number)
{
return number / 100.0;
}
如果您正在处理货币金额,请记住,当您将数字转换为double
时,可能会出现一些精度损失。
答案 4 :(得分:2)
public double toMoney(int number)
{
return number / 100.0
}
诀窍是使用100.0
而不是100
来强制java使用双重除法。
答案 5 :(得分:2)
public double toMoney(int number)
{
return number / 100.0;
}
P.S。你不应该使用双倍的金钱价值,不好的主意。