繁体   English   中英

在Java中使用千分制

[英]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的实例以匹配您的语言环境,创建一个指示期望格式的字符串,然后使用它解析输入。

RECOMENDATION

首先,作为对以后可能会问到的问题的建议,请阅读:

怎么问

如何创建最小的完整和可验证的示例(MCVE)

这样您就可以更快地获得更好的帮助。

解决方案1

您可能要使用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

解决方案2

这是有关实现方法的另一种选择,取自@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));
    }
}

解决方案3

如果您的输入是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);
    }
}

解决方案4

正如@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM