在Java/Android中将格式加倍至至少一个有效数字

Kyl*_*eld 5 java formatting android significant-digits

我有一个DecimalFormat对象,当我显示它时,我用它来将我的所有double值格式化为一组数字(比方说2).我希望它通常格式化为2位小数,但我总是想要至少一个有效数字.例如,如果我的值为0.2,那么我的格式化程序会吐出0.20,那很好.但是,如果我的值是0.000034,我的格式化程序将吐出0.00,我希望我的格式化程序吐出0.00003.

Objective-C中的数字格式化程序非常简单,我可以设置我想要显示的最大位数为2,最小有效位数为1,它会产生我想要的输出,但我怎么能在Java的?

我感谢任何人都可以提供帮助.

凯尔

编辑:我对舍入值感兴趣所以0.000037显示为0.00004.

cyb*_*onk 2

它效率不高,因此如果您经常执行此操作,我会尝试其他解决方案,但如果您只是偶尔调用它,则此方法将起作用。

import java.text.DecimalFormat;
public class Rounder {
    public static void main(String[] args) {
        double value = 0.0000037d;
        // size to the maximum number of digits you'd like to show
        // used to avoid representing the number using scientific notation
        // when converting to string
        DecimalFormat maxDigitsFormatter = new DecimalFormat("#.###################");
        StringBuilder pattern = new StringBuilder().append("0.00");
        if(value < 0.01d){
            String s = maxDigitsFormatter.format(value);
            int i = s.indexOf(".") + 3;
            while(i < s.length()-1){
                pattern.append("0");
                i++;
            }
        }
        DecimalFormat df = new DecimalFormat(pattern.toString());
        System.out.println("value           = " + value);
        System.out.println("formatted value = " + maxDigitsFormatter.format(value));
        System.out.println("pattern         = " + pattern);
        System.out.println("rounded         = " + df.format(value));
    }
}
Run Code Online (Sandbox Code Playgroud)