Java实现 取近似值

题目描述

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


输入描述:

输入一个正浮点数值



输出描述:

输出该数值的近似整数值


输入例子:
5.5

输出例子:
6


这个题,开始我做的很快,但是通过率只有60%。

问题1:

 re=(int)Math.floor(num); 
   double i=num%re;

Math里面有取整的函数可以直接用! 

num%re,而不是num%10,因为不能判断大小!


问题2:

一直都是 0.8 这个测试用例没有通过,

当num=0.8时,re用取整函数等于0 ,这个时候i就应该是Nan了,不过这个在线编程的工具好像令其等于无穷大,并没有报错。

然后就一直错一直错。

我暂时没有更好的想法,先用了非常恶心的 if if if来做了,这个代码是不优雅的,但是 AC 了,哎,先就这样吧。



import java.util.Scanner;


public class Main{
    
    public static void main(String args[]){
        
        Scanner sc=new Scanner(System.in);
        double number=sc.nextDouble();
        System.out.println(Func(number));
    }
    
    public static int Func(double num){
        int re;
        if(num<1){
          if(num>=0.5)
              re=1;
            else
                re=0;
            
            
            
        }else{
           re=(int)Math.floor(num); 
            double i=num%re;
        	if(i>=0.5){
            	re=re+1;       	 }
        }
        
       
        return re;
    }
    
}



不甘心的我,看了一下别人的实现....

1、用round函数:round是Java的四舍五入函数   【Java的floor是返回不大于的最大整数,ceil是返回不小于它的最小整数】  

我看了一下round函数实现好复杂啊~返回long类型,应该是考虑了各种情况。


import java.util.Scanner;
 
 
public class MathRound {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextDouble()){
            double l=sc.nextDouble();
            System.out.println(Math.round(l));
        }
    }
 
}


2、C++这一版我觉得很厉害了,用int强转...可以说非常霸道了

我在Java里面试了一下,确实厉害。

链接:https://www.nowcoder.com/questionTerminal/3ab09737afb645cc82c35d56a5ce802a
来源:牛客网

#include <iostream> 
  using namespace std; 
  int main() 
  { 

  float a; 
  cin>>a; 
  cout<<int(a+0.5); 
  return 0; 

  }



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值