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))
参考知识点