Java 带句点和逗号的自定义格式数字

Java 带句点和逗号的自定义格式数字,java,formatting,Java,Formatting,与格式化小数有关的一些问题(在本例中,所有这些问题对我都没有帮助) 我正在尝试将一个长字符串格式化为一个字符串,例如123456->012.345,6(句点后跟逗号,这看起来很奇怪,这是一个项目要求) 我正在尝试使用DecimalFormat进行格式化: 私有静态最终DecimalFormat格式=新DecimalFormat(“##0.000,0”) 但是,它在实例化期间引发异常: java.lang.IllegalArgumentException:格式错误的模式“###0.000,0” 我

与格式化小数有关的一些问题(在本例中,所有这些问题对我都没有帮助)

我正在尝试将一个长字符串格式化为一个字符串,例如123456->012.345,6(句点后跟逗号,这看起来很奇怪,这是一个项目要求)

我正在尝试使用DecimalFormat进行格式化:

私有静态最终DecimalFormat格式=新DecimalFormat(“##0.000,0”)

但是,它在实例化期间引发异常:

java.lang.IllegalArgumentException:格式错误的模式“###0.000,0”

我也曾尝试过提前将区域设置更改为欧盟系统,例如

NumberFormat NumberFormat=NumberFormat.getNumberInstance(Locale.derman)

我如何以这种方式格式化数字?DecimalFormat是错误的解决方案吗?我能用数字格式吗?或者我需要自定义格式化程序吗?

让我们试试这个

新的十进制格式(“0、.0”)

记住,逗号是分隔符,点是分数。你不能改变这两个

此格式将打印前导零、两个重要数字、三个数字、分数或0(如果是整数)。我想

所以,你能得到的最好结果就是 123456->012345.6

解决方法:

int index1 = string.indexOf(',');
int index2 = string.indexOf('.');
string.setCharAt(index1, '.');
string.setCharAt(index2, ',');

您可以使用
DecimalFormatSymbols
类将分组和小数分隔符设置为所需的任何字符。 Java教程(在更改格式符号部分)中显示了一个示例:


在模式本身中,分组始终由
表示,小数点由
表示

您应该避免直接构造
DecimalFormat
。逗号始终用于模式定义中的分组,无论它们在目标区域设置中如何显示。同样,句点总是用于小数。这似乎不合逻辑,但必须记住这是一个模式定义,就像#,这些字符描述的是替换,而不是字符本身

NumberFormat f = NumberFormat.getInstance(Locale.GERMANY);
if (f instanceof DecimalFormat) {
    ((DecimalFormat) f).applyPattern("##0,000.0");
}
f.format(123456 / 10.0);

小数点后的数字必须除以10。

如果我错过了您的请求,很抱歉,但是如果您需要非标准的数字表示,那么您可以简单地编写格式化程序:

static String formatLong(long value) {
        String ret = Long.toString(value);

        // Make the value 7 digits by prepending 0's
        while(ret.length()<7) ret="0"+ret;

        // Add a comma before the last digit
        ret = ret.substring(0,ret.length()-1)+","+ret.substring(ret.length()-1);

        // Add a period before the 4th digit
        ret = ret.substring(0,ret.length()-5)+"."+ret.substring(ret.length()-5);

        return ret;
    }

long a = 123456;
System.out.println(formatLong(a));
静态字符串格式长(长值){
字符串ret=Long.toString(值);
//通过在0前面加上前缀,使值为7位

而(ret.length()根据我对javadoc的阅读,DecimalFormat只支持在数字的整数部分进行“分组”;即小数点前的部分

  • 格式字符串的语法暗示了这一点,在格式字符串中,
    ,“
    只允许在
    ”之前出现。

  • javadoc也暗示了这一点,其中

    “分组大小是数字的整数部分中分组分隔符之间的位数。”


您假设我使用的是普通数字;)我想我需要一个不同的(自定义?)因为一个项目的要求是先有一个句点,然后是逗号,这看起来很奇怪。我知道我们在欧洲是这样做的,但看起来你只需要滚动你自己的一个句点…或者…在你像这样格式化它之后,切换句点和逗号的位置。