Java中小数点后两位数的数字格式

时间:2014-06-27 16:04:32

标签: java decimal

我编写了代码来计算两个字符串之间的Levenshtein距离,并给出输出,如浮点格式,小数点后面的数字。

如何格式化输出以在小数点后显示两位数?我不知道如何用Java做到这一点,但我知道在C中我会使用像。%2.f这样的东西。

以下是代码:

package algoritma.LevenshteinDistance;

public class LevenshteinDistance {

String hasilPersen;

public String getHasilPersen() {
    return hasilPersen;
}

public void setHasilPersen(String hasilPersen) {
    this.hasilPersen = hasilPersen;
}

public LevenshteinDistance() {

}

public double similarity(String s1, String s2) {
    if (s1.length() < s2.length()) { // s1 should always be bigger
        String swap = s1;
        s1 = s2;
        s2 = swap;
    }
    int bigLen = s1.length();
    if (bigLen == 0) {
        return 1.0; /* both strings are zero length */ }
    return (bigLen - computeEditDistance(s1, s2)) / (double) bigLen;
}

public  int computeEditDistance(String s1, String s2) {
    s1 = s1.toLowerCase();
    s2 = s2.toLowerCase();

    int[] costs = new int[s2.length() + 1];
    for (int i = 0; i <= s1.length(); i++) {
        int lastValue = i;
        for (int j = 0; j <= s2.length(); j++) {
            if (i == 0) {
                costs[j] = j;
            } else {
                if (j > 0) {
                    int newValue = costs[j - 1];
                    if (s1.charAt(i - 1) != s2.charAt(j - 1)) {
                        newValue = Math.min(Math.min(newValue, lastValue),
                                costs[j]) + 1;
                    }
                    costs[j - 1] = lastValue;
                    lastValue = newValue;
                }
            }
        }
        if (i > 0) {
            costs[s2.length()] = lastValue;
        }
    }
    return costs[s2.length()];
}

public String printDistance(String s1, String s2) {
    System.out.println("[Edit Distance]       " + s1 + " and " + s2  + " " +similarity(s1, s2) * 100 + "%");
    return  similarity(s1, s2) * 100 + " % ";
}

public static void main(String[] args) {


    LevenshteinDistance lv = new LevenshteinDistance();


  lv.printDistance("841644761164234287878797", "841644487611642341");

}

}

编辑,我的意思是返回方法public double similarity或方法printDistance。 因为,在我创建这个类的对象的另一个类中,我需要返回格式为0.00

5 个答案:

答案 0 :(得分:1)

以下是几种方式:

    double number = 678.675379823;
    System.out.printf("%.2f", number);

如果您想将结果保存在String

    String no = String.format("%.2f", number);
    System.out.println("Formatted no :"+no);

java.text.DecimalFormat是将数字格式化为n个小数位数的简洁明了的方法。

    NumberFormat formatter = new DecimalFormat("##.00");
    System.out.println(formatter.format(number));

虽然java.text.DecimalFormat是一个很好的实用程序类,并允许您在Java中动态格式化数字,但它有一个问题,即不是线程安全的或同步的。在时要小心多线程环境正确。

答案 1 :(得分:0)

使用System.out.printf(String formatString, Object... args)

System.out.printf("[Edit Distance]       %.2f and %.2f %.2f%%%n", s1, s1,
         similarity(s1, s2) * 100);

Here's the documentation on format strings

一些相关的摘录(文档很长而且有点令人困惑):

  
      
  • 常规,字符和数字类型的格式说明符具有以下语法:

         

    %[argument_index$][flags][width][.precision]conversion

         
        
    • 可选的 argument_index 是十进制整数,表示参数列表中参数的位置。第一个参数由“1 $”引用,第二个参数由“2 $”等引用

    •   
    • 可选的标志是一组修改输出格式的字符。有效标志集取决于转换。

    •   
    • 可选 width 是一个非负十进制整数,表示要写入输出的最小字符数。

    •   
    • 可选的精度是一个非负十进制整数,通常用于限制字符数。具体行为取决于转换。

    •   
    • 所需的转换是一个字符,指示应如何格式化参数。给定参数的有效转换集取决于参数的数据类型。

    •   
  •   

答案 2 :(得分:0)

您可以使用以下内容:

public class DecimalPlaces {

    public static void main(String[] args) {

        double d = 1.234567;
        System.out.printf("%1$.2f", d);
    }

}

OR

public void GetTwoDecimal(){

        double d = 2.34568;
        DecimalFormat f = new DecimalFormat("##.00");  // this will helps you to always keeps in two decimal places
        System.out.println(f.format(d)); 
}

答案 3 :(得分:0)

使用:

 DecimalFormat df = new DecimalFormat("#.00");
 df.format(your_decimal_value)

答案 4 :(得分:0)

可以使用DecimalFormat,我将相似度乘以100后使用它。代码如下,希望它能帮到你。

import java.awt.Graphics;
import java.text.DecimalFormat;

import javax.swing.JFrame;

public class LevenshteinDistance {

    String hasilPersen;

    public String getHasilPersen() {
        return hasilPersen;
    }

    public void setHasilPersen(String hasilPersen) {
        this.hasilPersen = hasilPersen;
    }

    public LevenshteinDistance() {

    }

    public double similarity(String s1, String s2) {
        if (s1.length() < s2.length()) { // s1 should always be bigger
            String swap = s1;
            s1 = s2;
            s2 = swap;
        }
        int bigLen = s1.length();
        if (bigLen == 0) {
            return 1.0; /* both strings are zero length */
        }

        return (bigLen - computeEditDistance(s1, s2))
                / (double) bigLen;
    }

    public int computeEditDistance(String s1, String s2) {
        s1 = s1.toLowerCase();
        s2 = s2.toLowerCase();

        int[] costs = new int[s2.length() + 1];
        for (int i = 0; i <= s1.length(); i++) {
            int lastValue = i;
            for (int j = 0; j <= s2.length(); j++) {
                if (i == 0) {
                    costs[j] = j;
                } else {
                    if (j > 0) {
                        int newValue = costs[j - 1];
                        if (s1.charAt(i - 1) != s2.charAt(j - 1)) {
                            newValue = Math.min(Math.min(newValue, lastValue),
                                    costs[j]) + 1;
                        }
                        costs[j - 1] = lastValue;
                        lastValue = newValue;
                    }
                }
            }
            if (i > 0) {
                costs[s2.length()] = lastValue;
            }
        }
        return costs[s2.length()];
    }

    public String printDistance(String s1, String s2) {

        double result = similarity(s1, s2);
        double times100 = result * 100;
        DecimalFormat decimalFormat = new DecimalFormat("0.00");
        Double formattedResult = Double.parseDouble(decimalFormat.format(times100));

        System.out.println("[Edit Distance]       " + s1 + " and " + s2 + " "
                + formattedResult + "%");
        return formattedResult + " % ";
    }

    public static void main(String[] args) {

        LevenshteinDistance lv = new LevenshteinDistance();

        lv.printDistance("841644761164234287878797", "841644487611642341");

    }
}