修約
描述
在物理實驗中,處理數據時常常需要對結果按照“四捨六入五湊偶”的修約規則進行修約。在本題中,我們需要對一個精度爲5位以內的數按照上述規則保留兩位小數。
例如:
9.8249=9.82 (小數點後第三位<5,因此捨去後面) 9.82671=9.83 (小數點後第三位>5,因此進位)
9.82501=9.83 (小數點後第三位等於5,但5後非全0,因此進位)
9.8351 =9.84 (同上)
9.8350=9.84 (小數點後第三位等於5,5後全0湊偶,3爲奇數,所以進位)
9.8250=9.82 (小數點後第三位等於5,5後全0湊偶,2爲偶數,因此捨去後面)
輸入
第一行有一個整數t,表示有t個數字需要被修約。
接下來有t行,每行表示一個要被修約的數字a(0<a≤10.00000)
輸出
對於每個數字,輸出按照上述規則保留兩位小數後的結果。
輸入樣例 1
3
9.8350
9.8250
9.82501
輸出樣例 1
9.84
9.82
9.83
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class xx {
/**
* @param value 需要科學計算的數據
* @param digit 保留的小數位
* @return 功能:四捨六入五成雙計算法
*/
public String sciCal(double value, int digit) {
String result = "-999";
try {
double ratio = Math.pow(10, digit);
double _num = value * ratio;
double mod = _num % 1;
double integer = Math.floor(_num);
double returnNum;
if (mod > 0.5) {
returnNum = (integer + 1) / ratio;
} else if (mod < 0.5) {
returnNum = integer / ratio;
} else {
returnNum = (integer % 2 == 0 ? integer : integer + 1) / ratio;
}
BigDecimal bg = new BigDecimal(returnNum);
result = bg.setScale((int) digit, BigDecimal.ROUND_HALF_UP).toString();
} catch (RuntimeException e) {
throw e;
}
return result;
}
public static void main(String[] args) {
xx x = new xx();
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
scanner.nextLine(); //需要加上這一行吸收上一行nextInt的回車
List<Double> c = new ArrayList<Double>();
for (int j = 0; j < i; j++) {
double s = Double.parseDouble(scanner.nextLine());
c.add(s);
}
for (int j = 0; j < i; j++) {
String a = x.sciCal(c.get(j),2);
System.out.println(a);
}
}
}
(幫一個學妹解決的問題)
另外博主收藏這些年來看過或者聽過的一些不錯的常用的上千本書籍,沒準你想找的書就在這裏呢,包含了互聯網行業大多數書籍和麪試經驗題目等等。有人工智能系列(常用深度學習框架TensorFlow、pytorch、keras。NLP、機器學習,深度學習等等),大數據系列(Spark,Hadoop,Scala,kafka等),程序員必修系列(C、C++、java、數據結構、linux,設計模式、數據庫等等)以下是部分截圖
更多文章見本原創微信公衆號「五角錢的程序員」,我們一起成長,一起學習。一直純真着,善良着,溫情地熱愛生活。關注回覆【電子書】即可領取哦。
給大家推薦一個Github,上面非常非常多的乾貨:https://github.com/XiangLinPro/IT_book