华为OJ 初级:取近似值

描述

写出一个程序,接受一个浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

知识点 函数
运行时间限制 10M
内存限制 128
输入

输入一个浮点数值

输出

输出该数值的近似整数值

样例输入 5.5
样例输出 6

/*这道题用了两种方法解答,两种方法测试一些负数值时,会得到不同的答案,但是在华为OJ上面都显示答案正确,说明OJ平台也还是有很多问题。
 * 方法1:由于将float强制转型为int时,只要不是整数,就都会把小数去掉,这样当为正数时,值会变小,是负数时,值会变大
 * 所以先判断正负,但是OJ平台好像判断负数时,-1.1变为2,-1.5也变为2,所以要跟正数不相同的处理
 * 
 * 方法2:直接调用Math.round()方法,可以将double或者float类型转为int型,但是该方法,处理正负数都是统一策略,即-1.5=-1,-1.6=-2,
 * 所以两种方法得到的最终结果会有不同,但是OJ平台都判断是正确。
 * 
 * */
import java.util.Scanner;

public class QuJinSiZhi {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		float input = scanner.nextFloat();
		method_1(input);
		System.out.println();
		method_2(input);
		scanner.close();
	}

	static void method_1(float input) {
		int output = (int) input;
		if (input >= 0) {
			if (input + 0.5 >= (int) (output + 1)) //当小数大于0.5,则输出结果在int转型后的结果上加1
				System.out.print(output + 1);
			else
				System.out.print(output);//当小数小于0.5,则直接输出int转型的结果
		} else {
			if (-input % 1 != 0)
				System.out.print(output - 1);
			else
				System.out.print(output);
		}
	}

	static void method_2(float input) {
		int output = Math.round(input);  //Math.rount()方法源码也是使用(int)( n + 0.5)的方法进行转型
		System.out.print(output);
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值