mcd*_*mcd 16 java currency number-formatting long-integer
我无法将长(美分)转换成货币格式.
我的代码:
long doublePayment = 1099; //Should equal $10.99
DecimalFormat dFormat = new DecimalFormat();
String formattedString = dFormat.format(doublePayment);
System.out.println(formattedString);
Run Code Online (Sandbox Code Playgroud)
产量:1,099
我也尝试过:
long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
String s = n.format(doublePayment);
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
由于这是美分,输出应为10.99或10.99美元.
无法弄清楚我做错了什么.谢谢!!!
Lau*_*uri 30
如果你很开始,你仍然应该使用java.math.BigDecimal.
long doublePayment = 1099;
BigDecimal payment = new BigDecimal(doublePayment).movePointLeft(2);
System.out.println("$" + payment); // produces: $10.99
Run Code Online (Sandbox Code Playgroud)
让它再次大声说出:永远不应该使用浮点变量来存储货币/货币价值.
Pet*_*rey 22
要将美分兑换成美元,您可以使用
long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
String s = n.format(doublePayment / 100.0);
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
这将准确高达70万亿美元.
您的文字是1099,这是一千元,99,与Java规则整数文字应对.根据您的JVM语言环境,此数字用1,099.表示.如果你在欧洲,那就是1.099.所以,这不是输出的问题,而是你的输入.
问题是你必须代表一个固定的点值,但你不知道java.math.BigDecimal并试图伪造它.当你做一些计算时,事情就会破裂.不要这样做.
这就是你应该做的.简单(它的代码也少得多):
BigDecimal payment = new BigDecimal("10.99");
System.out.println(String.format("$%.2f", payment));
Run Code Online (Sandbox Code Playgroud)
请注意如何使用String初始化数字.此外,将处理当前的区域设置,或者您可以通过重载方法提供所需的区域设置.String.format()
这些答案都没有考虑到不同区域设置的货币具有不同的小数位数。例如,日元有零位小数,而约旦第纳尔有三位,当然,美元有两位。我认为这是一个更合适的解决方案:
\n\n long payment = 1099L;\n BigDecimal bd = new BigDecimal(payment);\n\n Locale jpLocale = new Locale("ja", "JP");//Japan\n\n Currency jpCurrency = Currency.getInstance(jpLocale);\n NumberFormat jpnf = NumberFormat.getCurrencyInstance(jpLocale);\n int jpNumFractionalDigits = jpCurrency.getDefaultFractionDigits();\n\n BigDecimal jpbd = bd.movePointLeft(jpNumFractionalDigits);\n\n\n Locale usLocale = new Locale("en", "US");//United States\n\n Currency usCurrency = Currency.getInstance(usLocale);\n NumberFormat usnf = NumberFormat.getCurrencyInstance(usLocale);\n int usNumFractionalDigits = usCurrency.getDefaultFractionDigits();\n\n BigDecimal usbd = bd.movePointLeft(usNumFractionalDigits);\n\n\n\n System.out.println(jpnf.format(jpbd)); //prints \xef\xbf\xa51,099\n System.out.println(usnf.format(usbd));//prints $10.99\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
24589 次 |
| 最近记录: |