在java中使用仙和千
我有一个输入,它可以有一个13长的十进制数字,带有分和千分隔符。所以我可以有这样的东西:在java中使用仙和千,java,Java,我有一个输入,它可以有一个13长的十进制数字,带有分和千分隔符。所以我可以有这样的东西: 13.213.232.132,13 我的数据库表上的同一字段配置为数字(13,2)列(oracle) 我怎样才能从中转换 13.213.232.132,13 to 13213232132,13 反之亦然?我会使用NumberFormat.parse()--获取一个NumberFormat实例以匹配您的语言环境,创建一个表示所需格式的字符串,然后用它解析输入。建议 在此之前,请阅读以下内容,并作为您今后可
13.213.232.132,13
我的数据库表上的同一字段配置为数字(13,2)列(oracle)
我怎样才能从中转换
13.213.232.132,13 to 13213232132,13
反之亦然?我会使用NumberFormat.parse()--获取一个NumberFormat实例以匹配您的语言环境,创建一个表示所需格式的字符串,然后用它解析输入。建议
在此之前,请阅读以下内容,并作为您今后可能提出的问题的建议:
这样你就可以更快地得到更好的帮助
解决方案1
您可能想使用
下面是一个如何使用它的示例
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
解决方案2 这里有另一个关于如何实现它的选项,代码取自@JonSkeet。设置区域设置,但再次假设您的号码是双精度的
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));
}
}
解决方案3 如果您的输入是一个
字符串
,那么这可能是另一种解决方法(因为它是一个13长度的数字,所以我使用这些限制)
希望这些例子中的任何一个都能帮助你做任何你想做的事情
祝你好运使用十进制格式:
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);
}
您可能会找到您想要的。转换为字符串,删除句点,然后再转换回,否?输入不已经是字符串了吗,因为它包含逗号和句点?当您从数据库中读取时,它以什么形式返回给您?它是一个
字符串
?数据库中是否设置了NLS_LANG?如果是,它设置为什么?您现在如何查看该值?您是否从数据库中将其作为双精度读取,并在当前区域设置中打印出来?这不解决如何将
作为千位分隔符,将,
作为小数点进行解析的问题。它假定数字已经是双精度的,这似乎有点不太可能。@DavidConrad-yeah可能不是精确的解决方案,我正在寻找一种允许这样做的“自定义”十进制格式。OP没有指定它是双精度还是字符串。正在处理另一个解决方案。如果它是双精度的,那么它不能包含数千个分隔符。也许这是一个关于它现在的样子的示例(使用OP也未指定的十进制格式),您可以使用DecimalFomatSymbols来更改千位和十进制字符。
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);
}