[英]Working with cents and thousands in java
我有一个输入,可以有13个长十进制数字,带美分和数千个分隔符。 所以我可以有这样的事情:
13.213.232.132,13
我的数据库表上的同一字段配置为NUMBER(13,2)列(oracle)
我该如何转换
13.213.232.132,13 to 13213232132,13
和副版本?
我将使用NumberFormat.parse()-获取NumberFormat的实例以匹配您的语言环境,创建一个指示期望格式的字符串,然后使用它解析输入。
首先,作为对以后可能会问到的问题的建议,请阅读:
怎么问 。
这样您就可以更快地获得更好的帮助。
您可能要使用DecimalFormat
这是有关如何使用它的示例。
import java.util.*;
import java.text.*;
class NumberConverter {
public static void main(String args[]) {
double number = 12312312312.31;
String pattern = "###.##";
String pattern2 = "###,###.##";
DecimalFormat myFormatter = new DecimalFormat(pattern);
System.out.println(myFormatter.format(number));
myFormatter = new DecimalFormat(pattern2);
System.out.println(myFormatter.format(number));
}
}
所有你需要用这个例子做的是更换,
对.
反之亦然。 (我的意思是分隔符)。
我的示例的实际输出为:
12312312312.31
12,312,312,312.31
这是有关实现方法的另一种选择,取自@JonSkeet answer的代码。 设置语言环境,但再次假设您的数字是双精度数。
import java.util.*;
import java.text.*;
class NumberConverter {
public static void main(String args[]) {
double number = 13213232132.13;
NumberFormat f = NumberFormat.getInstance(Locale.GERMANY);
((DecimalFormat) f).applyPattern("##0,000.00");
System.out.println(f.format(number));
}
}
如果您的输入是String
那么这可能是另一种解决方法(因为这是13个长度的数字,这就是我使用这些限制的原因)。
import java.util.*;
import java.text.*;
import java.lang.StringBuilder;
class NumberConverter {
public static void main(String args[]) {
String number = "13.213.232.132,13";
String number1;
String number2;
number1 = number.replace(".", "");
int length;
int length1;
StringBuilder sb = new StringBuilder();
sb.append(number1.charAt(0));
sb.append(number1.charAt(1));
sb.append(".");
int counter = 0;
for(int i = 2; i < 11; i++) {
if(counter == 3) {
sb.append(".");
counter = 0;
}
sb.append(number1.charAt(i));
counter++;
}
sb.append(",");
sb.append(number1.charAt(12));
sb.append(number1.charAt(13));
number2 = sb.toString();
System.out.println(number);
System.out.println(number1);
System.out.println(number2);
}
}
正如@kaos在他的评论中所说,您也可以通过以下方式使用DecimalFomatSymbols
来做到这一点:
import java.util.*;
import java.text.*;
import java.lang.StringBuilder;
class NumberConverter {
public static void main(String args[]) {
String formatString = "###,###.##";
double number = 12312312312.31;
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.getDefault());
otherSymbols.setDecimalSeparator(',');
otherSymbols.setGroupingSeparator('.');
DecimalFormat df = new DecimalFormat(formatString, otherSymbols);
System.out.println(df.format(number));
}
}
希望这些示例中的任何一个都可以在您尝试做的任何事情中为您提供帮助。
祝好运
使用DecimalFormat:
DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(new Locale("pt", "br"));
formatter.applyPattern("#0.##"); //i guess this is the pattern you need.
System.out.println(formatter.format(new BigDecimal("13213232132.13")));
一个非常丑陋的方法,也许有帮助:
public static void main(final String[] args) {
final String str = "12.345.678.912,13";
final String improved = str.replaceAll("\\.", "").replaceAll(",", ".");
System.out.println(improved);
final double dbl = Double.parseDouble(improved);
System.out.println("For database: " + dbl);
// You may even pass a Locale to String::format
final String str2 = String.format("%,f", dbl);
System.out.println(str2);
final String stringResult = str2.substring(0, str2.length() - 4);
System.out.println(stringResult);
}
您可能会发现自己想要的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.