好的,我知道有一个问题已经非常相似,但它并没有完全回答我的问题。如果我做错了,请告诉我。
我编写了一个程序,可以从用户那里获得华氏温度并将其转换为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
。
我尝试过使用DecimalFormat
和String.format
(如上所述),但两种方法都打印出37.778C
。有更好的方法吗?
感谢您的回答,如果这是重复,我会道歉。
答案 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得到你想要的小数位数。施法后,将其除以附加的十进制零。