Java-如何从整数(货币)中获取双精度

Java-如何从整数(货币)中获取双精度,java,algorithm,currency,Java,Algorithm,Currency,我得到: 作为返回,我需要双倍数字:12.55或者如果输入:10,则:00.10 我知道我可以用模来做这样的事情: 1255%100。。得到55。。但是12个人怎么做,最后怎么做 把它做成双人的 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

我知道我可以用模来做这样的事情:

1255%100。。得到55。。但是12个人怎么做,最后怎么做 把它做成双人的

int number = 1255; -> //It could also be 125(1€25Cent) or 10(10Cent) or 5(5Cent)

public double toMoney(int number)
{
...
}

如果您处理的是货币金额,请记住,当您将数字转换为
双精度时,可能会出现精度损失。如果我正确理解您的问题,您可能正试图这样做:

public double toMoney(int number)
{
  return number / 100.0;
}
尽管有一句警告:由于四舍五入问题,您不应该使用浮点货币

如果您只想以货币格式打印数字,这里有一个100%安全的方法:

return (double)number / 100.;
System.out.print((number/100)+”);
整数分=数字%100;
如果(美分<10)
系统输出打印(“0”);
系统输出打印项次(分);
这可能可以简化得更好。。。当然你可以选择BigDecimal,但我认为这是用大锤砸蚂蚁

System.out.print((number / 100) + ".");
int cents = number % 100;
if (cents < 10)
    System.out.print("0");
System.out.println(cents);
诀窍是使用
100.0
而不是
100
强制java使用双除法

public double toMoney(int number)
{
return number / 100.0
}

另外,你不应该使用double表示货币价值,这是个坏主意。

这种方法不应该存在,因为它不能给出正确的结果。

因为在内部,
double
是一种格式(二进制浮点),根本无法准确表示0.1、0.2或0.3这样的数字。有关更多信息,请阅读


如果您需要小数,您的输出格式应该是
BigDecimal
String

打印金额的方式应该是使用NumberFormat类!
看看这个例子:

public double toMoney(int number)
{
    return number / 100.0;
}
将打印此输出:

NumberFormat format = NumberFormat.getCurrencyInstance(Locale.FRANCE);
format.setCurrency(Currency.getInstance("EUR"));
System.out.println( format.format(13234.34) );

您可以尝试不同的地区和货币代码。参见文档:。

你不应该为了金钱价值而使用double,这是一个坏主意。我正在学习(学校),这是我生活的一部分exercise@PetrAbdulin出于好奇,我们应该用什么呢?@Kshitij:BigDecimal还是String。主要的一点是,
double
没有小数位数,因为它不是十进制格式。。我有0.1这样的数字,但我想要00.10。。但是当我输入BigDecimal时,它告诉我,该类型无法识别。@eMi
BigDecimal
是一个类,您需要导入它。@eMi:前导零实际上是关于格式的,所以您必须使用DecimalFormat来获取字符串。我想对于家庭作业,您可能可以不受影响。但一般来说,最好将其保留为表示美分的整数。是的,但我必须制作一个方法(printMoney),以这种格式打印货币:XX.XX欧元或其他任何形式。。所以我需要“变压器”^它不完整,我只是加了同样的4欧元….:<代码>国际欧元=pGeldWertGanzzahl/100;如果(欧元<10)系统输出打印(“0”);系统输出打印((欧元)+“);整数=pGeldWertGanzzahl%100;如果(分<10)系统输出打印(“0”);系统输出打印项次(分)谢谢!看看答案:
int euro=number/100;如果(欧元<10)系统输出打印(“0”);系统输出打印((欧元)+“);整数分=数字%100;如果(分<10)系统输出打印(“0”);系统输出打印项次(分)有效
13 234,34 €