修约
描述
在物理实验中,处理数据时常常需要对结果按照“四舍六入五凑偶”的修约规则进行修约。在本题中,我们需要对一个精度为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