我无法将长(美分)转换成货币格式。
我的代码:
long doublePayment = 1099; //Should equal $10.99
DecimalFormat dFormat = new DecimalFormat();
String formattedString = dFormat.format(doublePayment);
System.out.println(formattedString);
输出:1,099
我也尝试过:
long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
String s = n.format(doublePayment);
System.out.println(s);
由于这是美分,输出应为10.99或10.99美元。
不能弄清楚我做错了什么。感谢!!!
答案 0 :(得分:28)
如果你开始时间很长,你仍然应该使用java.math.BigDecimal。
long doublePayment = 1099;
BigDecimal payment = new BigDecimal(doublePayment).movePointLeft(2);
System.out.println("$" + payment); // produces: $10.99
让它再次大声说出:永远不应该使用浮点变量来存储货币/货币价值。
答案 1 :(得分:22)
要将美分兑换成美元,您可以使用
long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
String s = n.format(doublePayment / 100.0);
System.out.println(s);
这将准确高达70万亿美元。
答案 2 :(得分:7)
你的文字是1099
,一千九百九十九,处理整数文字的Java规则。根据您的JVM语言环境,此数字用1,099
表示。如果你在欧洲,那就是1.099
。因此,输出不是问题,而是使用输入。
问题是您必须表示固定点值,但您不知道java.math.BigDecimal
并尝试伪造它。当你做一些计算时,事情就会破裂。不要这样做。
这是你应该做的。简单(它的代码也少得多):
BigDecimal payment = new BigDecimal("10.99");
System.out.println(String.format("$%.2f", payment));
请注意您如何使用字符串真正启动号码。另外,String.format()
会谨慎of the current locale,或者您可以通过重载方法提供所需的一个。
答案 3 :(得分:1)
这些答案都没有考虑到不同地区的货币具有不同数量的小数位数。例如,日元的小数位数为零,而约旦第纳尔的分数为3,而美元的分数当然为2。我相信这是一个更合适的解决方案:
long payment = 1099L;
BigDecimal bd = new BigDecimal(payment);
Locale jpLocale = new Locale("ja", "JP");//Japan
Currency jpCurrency = Currency.getInstance(jpLocale);
NumberFormat jpnf = NumberFormat.getCurrencyInstance(jpLocale);
int jpNumFractionalDigits = jpCurrency.getDefaultFractionDigits();
BigDecimal jpbd = bd.movePointLeft(jpNumFractionalDigits);
Locale usLocale = new Locale("en", "US");//United States
Currency usCurrency = Currency.getInstance(usLocale);
NumberFormat usnf = NumberFormat.getCurrencyInstance(usLocale);
int usNumFractionalDigits = usCurrency.getDefaultFractionDigits();
BigDecimal usbd = bd.movePointLeft(usNumFractionalDigits);
System.out.println(jpnf.format(jpbd)); //prints ¥1,099
System.out.println(usnf.format(usbd));//prints $10.99
答案 4 :(得分:0)
double doublePayment = 10.99;
您需要提供这样的货币。 NumberFormat
无法理解您是以美分还是以美元提供,除非它看到小数点
答案 5 :(得分:0)
格式化不是问题,输入问题。将你的输入除以100就可以了。
float payment = 1099 / ((float) 100);
答案 6 :(得分:0)
使用货币格式化程序:
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.ENGLISH);
String output = nf.format(value);
System.out.println(value + " " + output);