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

Jai*_*bin 4 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");
    } 
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的回答,如果这是重复,我道歉.

Tag*_*eev 13

你可以使用DecimalFormat,只需设置RoundingMode:

DecimalFormat df = new DecimalFormat("#.###");
df.setRoundingMode(RoundingMode.FLOOR);
String num = df.format(celcius);
Run Code Online (Sandbox Code Playgroud)


Mah*_*dav 5

将摄氏度乘以 1000 将小数点移动 3 位

celsius = celsius * 1000;
Run Code Online (Sandbox Code Playgroud)

现在把数字除以 1000

celsius = Math.floor(celsius) / 1000;    
Run Code Online (Sandbox Code Playgroud)

它将消除对 String.format() 方法的需要。