打印前3个小数位而不进行舍入

时间:2015-08-31 02:23:49

标签: java floating-point rounding

好的,我知道有一个问题已经非常相似,但它并没有完全回答我的问题。如果我做错了,请告诉我。

我编写了一个程序,可以从用户那里获得华氏温度并将其转换为Celcius。它看起来像这样:

import java.util.Scanner;

public class FahrenheitToCelcius {

    public static void main(String[] args) {

        double fahrenheit;
        Scanner sc = new Scanner(System.in);

        System.out.print("Please enter a temperature in Fahrenheit: ");

        fahrenheit = sc.nextDouble();  
        double celcius = (fahrenheit - 32) * 5 / 9;

        String num = String.format("%.3f", celcius);

        System.out.println(" ");
        System.out.println(fahrenheit + "F" + " is " + num + "C");
    } 
}

当它打印出答案时,我只想打印前3个小数位,但不是圆形。例如,如果输入为100F,我希望37.777C打印, 37.778C

我尝试过使用DecimalFormatString.format(如上所述),但两种方法都打印出37.778C。有更好的方法吗?

感谢您的回答,如果这是重复,我会道歉。

4 个答案:

答案 0 :(得分:10)

您可以使用DecimalFormat,只需设置RoundingMode

即可
DecimalFormat df = new DecimalFormat("#.###");
df.setRoundingMode(RoundingMode.FLOOR);
String num = df.format(celcius);

答案 1 :(得分:4)

将摄氏数乘以1000可将小数移动3个点

celsius = celsius * 1000;

现在将数字除以1000

celsius = Math.floor(celsius) / 1000;    

它将不再需要String.format()方法。

答案 2 :(得分:1)

您可以简单地四舍五入到小数点后 4 位,然后修剪最后一个字符。

String num = String.format("%.4f", celcius);

num = num.substring(0, num.length() - 1);

答案 3 :(得分:0)

这个答案与使用Math.floor类似,但可能更容易转换为int:

想要2位小数?试试这个:

System.out.println( (int) (your_double * 100) / 100.0 );

想要3个小数位?试试这个:

System.out.println( (int) (your_double * 1000) / 1000.0 );

想要4位小数?试试这个:

System.out.println( (int) (your_double * 10000) / 10000.0 );

看模式?将你的双倍乘以10得到你想要的小数位数。施法后,将其除以附加的十进制零。