题解 | #取近似值#

取近似值

http://www.nowcoder.com/practice/3ab09737afb645cc82c35d56a5ce802a

'''
这个题的考点在.5这个分水岭,而官方给的奇进偶舍这个办法也不能很好的解决这个问题。
那么只能通过逻辑判断来做精度控制判断,把这个问题返抛给解释器去自己判断(其实如何做到16位以上的浮点运算自己没搞明白)
当然,以下方法也有局限性,当小数点后为16个位数时就看最后一个数是9还是小于9(例如:1.499999999999999[9]如果这个数小于9那还能玩,如果大于9就玩不了了,所以这个方法也仅限于16个小数位,超过16位就歇菜了)
'''
from math import *
n=float(input())  #强制类型转换float
def ceilNumber(n):  #定义一个函数
    """
    假设一个数1.499999 向上取为2 那么2-1.499999>在数学上是大于0.5的,这一点符合数学逻辑,那么说明这个数小数位是大不过0.5的,那必定要向下取,所以就用floor(n).
    假设一个数1.500001 ceil(n)向上取则为2,那么2-1.500001必定在数学上是小于0.5的,那么这时候说明他该进位取大值,那就得到ceil(n)
    但是问题是,当小数位达到16位后,世界就变了,这个算法就彻底失效了。
    """
    a=(ceil(n)-n)   
    if (a <=0.5) :
        print(ceil(n))
    else:
        print(floor(n))
ceilNumber(n)
全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
4
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务