Java-如何从整数(货币)中获取双精度
我得到: 作为返回,我需要双倍数字:12.55或者如果输入:10,则:00.10 我知道我可以用模来做这样的事情: 1255%100。。得到55。。但是12个人怎么做,最后怎么做 把它做成双人的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) { ... } 如果您处理的是货币金额,请记住,当您将数字转换为
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时,它告诉我,该类型无法识别。@eMiBigDecimal
是一个类,您需要导入它。@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 €