Skip to content

HJ7 取近似值【入门】

描述

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

数据范围:保证输入的数字在 32 位浮点数范围内

输入描述:

输入一个正浮点数值

输出描述:

输出该数值的近似整数值

示例1

输入:5.5

输出:6

说明:0.5>=0.5,所以5.5需要向上取整为6

示例2

输入:2.499

输出:2

说明:0.499<0.5,2.499向下取整为2

代码

算法一:完全依照传统思维逻辑,截取小数点前面后边的值,然后一一对比。如果考虑负数,此方法就不可行了。

python
num = input()
str = num.split('.')
if len(str) >= 2:
    if int(str[1][0]) >=5:
        print(int(str[0]) + 1)
    else:
        print(int(str[0]))
elif len(str) == 1:
    print(str[0])

算法二:采用Decimal库来处理,为什么不直接使用round,因为比较准确的奇进偶不进。

python
num = input()

from decimal import Decimal, ROUND_HALF_UP
origin_num = Decimal(num)
answer_num = origin_num.quantize(Decimal("0"), rounding=ROUND_HALF_UP)
print(answer_num)

其它算法:牛客网大佬思路

python
#思路1
from math import ceil,floor
def ceilNumber(n):
    a = ceil(n)-n
    if (a<=0.5):
        return ceil(n)
    return floor(n)
b = float(input())
print(ceilNumber(b))


#思路2:很巧妙的思路,但是注意只能正数
def ceilNumber(n):
    a = int(n+0.5)
    return a
b = float(input())
print(ceilNumber(b))

#思路3:巧妙的思路的lambda形式
n = float(input())
y = lambda x : int(x+0.5)
print(y(n))

参考知识点

为什么你需要少看垃圾博客以及如何在Python里精确地四舍五入 - 个人文章 - SegmentFault 思否