Java - 是否可以找出字符串的DecimalFormat

时间:2013-09-27 02:51:57

标签: java parsing decimalformat

我试图弄清楚如何通过String给出小数来计算有效位数,以便我可以对小数进行计算并使用相同的有效位数打印结果。这是一个SSCCE:

import java.text.DecimalFormat;
import java.text.ParseException;

public class Test {

    public static void main(String[] args) {
        try {
            DecimalFormat df = new DecimalFormat();
            String decimal1 = "54.60"; // Decimal is input as a string with a specific number of significant digits.
            double d = df.parse(decimal1).doubleValue();
            d = d * -1; // Multiply the decimal by -1 (this is why we parsed it, so we could do a calculatin).
            System.out.println(df.format(d)); // I need to print this with the same # of significant digits.
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

我知道DecimalFormat是1)告诉程序你打算如何显示你的小数(format())和2)告诉程序期望一个字符串表示的十进制格式是什么格式在(parse())。但是,有没有办法从解析后的字符串中删除DecimalFormat,然后使用相同的DecimalFormat输出一个数字?

6 个答案:

答案 0 :(得分:4)

使用BigDecimal

        String decimal1 = "54.60"; 
        BigDecimal bigDecimal = new BigDecimal(decimal1);
        BigDecimal negative = bigDecimal.negate(); // negate keeps scale
        System.out.println(negative); 

或简短版本:

        System.out.println((new BigDecimal(decimal1)).negate());

答案 1 :(得分:1)

通过String.indexOf('.')找到它。

public int findDecimalPlaces (String input) {
    int dot = input.indexOf('.');
    if (dot < 0)
        return 0;
    return input.length() - dot - 1;
}

您还可以通过setMinimumFractionDigits()setMaximumFractionDigits()配置DecimalFormat / NumberFormat来设置输出格式,而不必将模式构建为字符串。

答案 2 :(得分:0)

int sigFigs = decimal1.split("\\.")[1].length();

计算小数点右边的字符串长度可能是实现目标的最简单方法。

答案 3 :(得分:0)

如果你想要小数位,你不能首先使用浮点数,因为FP没有它们:FP有二进制位。使用BigDecimal,并直接从String.构建它。我不明白为什么你需要一个DecimalFormat对象。

答案 4 :(得分:0)

您可以使用正则表达式将数字字符串转换为格式字符串:

String format = num.replaceAll("^\\d*", "#").replaceAll("\\d", "0");

例如“123.45” - &gt; “#.00”和“123” - &gt; “#”

然后使用结果作为DecimalFormat

的模式

它不仅有效,而且只有一条线。

答案 5 :(得分:-1)

我添加了一个代码来设置小数位数以保持与decimal1

相同
 public static void main(String[] args) {
        try {
            DecimalFormat df = new DecimalFormat();
            String decimal1 = "54.60"; // Decimal is input as a string with a specific number of significant digits.
            //
            int index = decimal1.indexOf(".");
            int prec = -1;
            if (index != -1) {
                prec = decimal1.substring(index, decimal1.length()).length();
            }
            if (prec>0) {
                df.setMaximumFractionDigits(prec);
                df.setMinimumFractionDigits(prec-1);
            }
            //
            double d = df.parse(decimal1).doubleValue();
            d = d * -1; // Multiply the decimal by -1 (this is why we parsed it, so we could do a calculatin).
            System.out.println(df.format(d)); // I need to print this with the same # of significant digits.
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }