【问题标题】:How do I convert from dot-separated money into comma-separated number如何从点分隔的钱转换为逗号分隔的数字
【发布时间】:2011-10-06 14:54:51
【问题描述】:
我有以下可能的输入值,它们以缩写的方式表示:
- 39.44 美元
- 0.523 美元
- 1.336 美元
我想转换成:
- 39,440,000 美元
- 523,000 美元
- 1,336,000 美元
我宁愿使用通用方法而不是构建奇怪的字符串,所以我尝试使用 DecimalFormat(java) 对象,尽管我没有得到想要的结果。任何帮助表示赞赏。
【问题讨论】:
标签:
java
format
currency
csv
【解决方案1】:
你的意思是这样吗?
String[] values = "$39.44,£0.523,€1.336".split(",");
for (String value : values) {
char ccy = value.charAt(0);
double amount = Double.parseDouble(value.substring(1));
System.out.printf("%s => %s%,d%n", value, ccy, (int)(amount * 1e6));
}
打印
$39.44 => $39,440,000
£0.523 => £523,000
€1.336 => €1,336,000
【解决方案2】:
基本上你所要做的就是用点替换逗号,用逗号替换点。
以下代码会将“$2,400.25”更改为“$2.400.25”。如果您再次通过此方法发送带点的货币,您将获得逗号版本。这是一个简单的反转。
public class DotsToCommas {
public static void main(String[] args) {
String dotCurrency = "$2,400.35";
String commaCurrency = invertCommasAndDots(dotCurrency);
System.out.println(commaCurrency);
}
public static String invertCommasAndDots(String dotString) {
StringBuffer outputBuffer = new StringBuffer();
for (int i = 0; i < dotString.length(); i++) {
if (dotString.charAt(i) == '.')
outputBuffer.append(',');
else if (dotString.charAt(i) == ',')
outputBuffer.append('.');
else
outputBuffer.append(dotString.charAt(i));
}
return outputBuffer.toString();
}
}
【解决方案3】:
不要将钱表示为双重。有些值对货币有效,不能用双精度(或浮点数)表示
这似乎是一种合理的技术:
- 确定要使用多少个零作为填充。存储此值。
- 删除美元符号和所有句点。
org.apache.commons.lang.StringUtils.strip(stringName, "$.") 会这样做
- 零填充填充到所需大小。
- 使用您想要的任何技术进行格式化。
【解决方案4】:
感谢大家的建议和数学。我遇到了这个解决方案:
public class convertMillions {
public static void main(String[] args) {
String currency = "$";
char delimiter = ´,´;
String value = "39.44"; //Example
String commaCurrency = convert(value, currency, delimiter);
System.out.println(commaCurrency);
}
public String convert(String value, String currency, char delimiter) {
boolean zeroValue = value.isEmpty();
if(zeroValue)
return " "; //Used when String is empty
/*Convert into plain String number*/
double amount = Double.parseDouble(value.substring(0));
String numberStr = String.valueOf((int)(amount * 1e6));
/*Append unit (group separator) delimiter and currency*/
double number = Double.valueOf(numberStr);
String pattern = "###,###";
DecimalFormat formatter;
DecimalformatSymbols dfs = new DecimalFormatSymbols(Local.US);
dfs.setGroupingSeparator(delimiter);
formatter = new DecimalFormat(pattern, dfs);
String cypher = formatter.format(number);
String money = currency.concat(cypher);
return money;
}
}
输入:
输出:
- 39,440,000 美元
- 523,000 美元
- 1,336,000 美元
- 7,000,000 美元
- 125,000,000 美元