在java中使用仙和千

在java中使用仙和千,java,Java,我有一个输入,它可以有一个13长的十进制数字,带有分和千分隔符。所以我可以有这样的东西: 13.213.232.132,13 我的数据库表上的同一字段配置为数字(13,2)列(oracle) 我怎样才能从中转换 13.213.232.132,13 to 13213232132,13 反之亦然?我会使用NumberFormat.parse()--获取一个NumberFormat实例以匹配您的语言环境,创建一个表示所需格式的字符串,然后用它解析输入。建议 在此之前,请阅读以下内容,并作为您今后可

我有一个输入,它可以有一个13长的十进制数字,带有分和千分隔符。所以我可以有这样的东西:

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);
}