如何在不使用math.round或%3f等方法的情况下舍入/截断数字?

时间:2013-10-26 21:25:01

标签: java

到目前为止,我需要对我输入的数字进行舍入,并将其设置为3位小数,而不使用这些方法。

    if(number !=(int)number){           
        number*=1000;      
        number=(int)number;  
        number=(double)number; 
        number/=1000;  
        System.out.println("-"+ number);         
    }
    if(number ==(int)number){       
        System.out.println("-"+ number + "00");
    }       

如上所述,除了带有2位小数的输入外,它适用于任何输入,如12.34。 如果我键入12.34并显示12.340?

,如何使其工作

3 个答案:

答案 0 :(得分:0)

你可以像这样使用printf方法:

System.out.printf("result = %.3f",number);

编辑(不使用printf格式说明符)

void floatTruncate(float val){
        float a = val;
        String result = a + "";

        int index = result.indexOf(".");
        int zeroes = result.length() - 1 - index;

        zeroes = 3 - zeroes;

        for (int i = 1; i <= zeroes && zeroes < 3; i++) {
            result = result + "0";
        }

        System.out.println("new result = " + result);

}

编辑2:(如果您的输入与number = 22.34567f类似,并且您希望输出为22.345,则只需要保留3位小数,然后使用此
/>

     void floatTruncate(float val) {
            float a = val;
            String result = a + "";

            int index = result.indexOf(".");
            int zeroes = result.length() - 1 - index;

//use this logic if ur logic is to keep only 3 decimal places 
            if(zeroes>3){
                result = result.substring(0, index+4);
            }
            zeroes = 3 - zeroes;

            for (int i = 1; i <= zeroes && zeroes < 3; i++) {
                result = result + "0";
            }

            System.out.println("new result = " + result);
        }

示例输出

a = 22.3f -> 22.300
a = 22.34f -> 22.340
a = 22.345f -> 22.345
a = 22.34567f -> 22.345

答案 1 :(得分:0)

尝试这样的事情(截断数字):

number *= 1000.0;
if (((int) number) % 100 == 0) {
    System.out.println((number / 1000.0) + "00");
} else if (((int) number) % 10 == 0) {
    System.out.println((number / 1000.0) + "0");
} else {
    System.out.println(number / 1000.0);
}

答案 2 :(得分:0)

这个怎么样?适用于给定的输入

public static String truncate(Double a, int digits) {
    String[] values = a.toString().split("\\.");
    String integer = values[0];
    String decimal = values[1];


    if (decimal.length() < digits) {
        int n = digits - decimal.length();
        for (int i = 0; i < n; i++) {
            decimal += "0";
        }
        return integer + "." + decimal;
    }
    return integer + "." + decimal.substring(0, digits);

}

public static void main(String[] args) {
    System.out.println(truncate(1.0, 7));
    System.out.println(truncate(1.23719273, 4));
    System.out.println(truncate(1d, 1));
}

停止

1.0000000
1.2371
1.0