遇到一道测评题目,大致意思是结果保留两位小数,并向上取值。在规定时间内认为自己实现了功能,但结果就是不能AC。过后想想大概是因为1.200这种情况,直接变成了1.2,而不是1.20。
首先说保留两位小数向上取值。这里是要解决一个金融上的小问题,ans是计算后的准确结果,后面可能有很多位的小数部分,因为考虑到的是保留两位小数,且是否要向上进0.01只与小数点后第三位有关,于是,采用(int)(ans * 1000)的操作将后面的小数部分去掉,且将结果变成一个整数,这个整数的个位数(ans1 % 10)即为ans的小数点后第三位,在这里判断是否为0,如果不为0,都要将整数的十位数,即原小数的小数点后第二位+1,处理之后,小数点后第三位就可以去掉啦,然后把整数变回小数,由于这里要求返回的是String类型,用toString()方法就可以了。
static String calculate(int a, double i, int n) {
double ans = a * (i /1200) * Math.pow((1+i /1200),(n * 12)) / (Math.pow((1+i /1200),(n * 12))-1);
int ans1 = (int)(ans*1000);
if(ans1 % 10 != 0)
ans1 = ans1 + 10;
ans1 = ans1 - ans1 % 10;
double res = ans1/1000.0;
String result = Double.toStrin