缩写Android中的数字,区分敏感

时间:2015-09-02 19:02:47

标签: java android

在我的Android项目中,我希望找到一种方法来缩写对各种语言环境敏感的数字。如果数量小于1000,则保持不变;否则,我希望数字除以1000的最大可能功率并四舍五入到小数点后两位。到目前为止,我有下面的代码,它正确地产生了输出中所述的所需结果。

public void formatNumbers() {
    //Output:
    //842 => 842
    //24,567 => 24.57k
    //356,915 => 356.92k
    //7,841,234 => 7.84M
    //1,982,452,873 => 1.98B
    int[] i = new int[] {842, 24567, 356915, 7841234, 1982452873};
    String[] abbr = new String[] {"", "k", "M", "B"};
    DecimalFormat df = new DecimalFormat("0.00");
    df.setRoundingMode(RoundingMode.HALF_UP);
    for (long i1 : i) {
        int thousands = thousands(i1);
        String result;
        if(thousands == 0) {
            result = String.valueOf(i1);
        } else {
            double d = (double) i1 / Math.pow(1000.0, thousands);
            result = df.format(d)+abbr[thousands];
        }
        System.out.println(i1 + " => " + result);
    }
}
public int thousands(double num) {
    //returns the number of times the number can be divided by 1000
    int n=0;
    double comp=1000.0;
    while(num>comp) {
        n++;
        comp*=1000.0;
    }
    return n;
}

我担心的是我想要一种方法来确保输出对语言环境敏感。如果我理解正确,DecimalFormat应该在适用的情况下处理诸如逗号而不是小数的约定;这让我对后缀感到担忧。虽然我的产出通常在美国被理解为偶然目的(尽管“M”在某些行业中用于表示“数千”,例如金融),而且根据我的理解,欧洲的许多地区都有基于拉丁语的语言,有许多语言环境,这是不能很好理解的。也许有一个内置函数来处理这个我无法找到的函数。提前感谢您对此任务的关注和投入。

0 个答案:

没有答案