繁体   English   中英

将不同长度的数字舍入到最接近的 0 或 5

[英]Round numbers of different lengths to nearest 0 or 5

提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文

如何将不同长度大小的数字四舍五入到最接近的零或五?

例子:

1291 -> 1290
0.069 -> 0.07
1.08 -> 1.1
14 -> 15
6 -> 5

尝试使用 round() 和 math.ceil() / math.floor() 但由于数字每次的长度都不同,我无法动态调整它,数字从 function 返回,而不是数组。

我写了一个代码并解释了。 它似乎工作。 我没有考虑负数。

import numpy as np
convDict = {
    "0":"0",
    "1":"0",
    "2":"0",
    "3":"5",
    "4":"5",
    "5":"5",
    "6":"5",
    "7":"5",
    "8":"0",
    "9":"0"
}

def conv(f):
    str_f = str(f)
    
    # if input is like, 12. or 13.0,so actually int but float data type
    # We will get rid of the .0 part
    if str_f.endswith(".0"):
        str_f = str(int(f))

    # We need last character, and other body part
    last_f = str_f[-1]
    body_f = str_f[:-1]

    # if last char is 8 or 9 we should increment body last value
    if last_f in "89":
        # Number of decimals
        numsOfDec = body_f[::-1].find('.')

        # numsOfDec = -1 means body is integer, we will add 1
        if numsOfDec == -1:
            body_f = str(int(body_f) + 1)

        else:
            # We will add 10 ** -numsOfDec , but it can lead some numerical differences like 0.69999, so i rounded
            body_f = str(np.round(float(body_f) + 10 ** (-numsOfDec),numsOfDec))

    # Finally we round last char
    last_f = convDict[last_f]
    return float(body_f + last_f)

还有一些例子,

print(conv(1291))
print(conv(0.069))
print(conv(1.08))
print(conv(14))
print(conv(6))
print(conv(12.121213))
print(conv(12.3))
print(conv(18.))
print(conv(18))

动态舍入到最接近的五的有点 pythonic 方法是使用 round() function 和输入数字(除以 5),您希望舍入发生的索引 [-2:百,-1:十,0: whole, 1:1/10ths, 2:1/100s] 并将结果乘以 5。您可以通过使用 decimal 模块查找有多少个小数位来计算此索引。

 i = decimal.Decimal('0.069')
 i.as_tuple().exponent
 -3 

注意,这个 function 将数字作为字符串,输出小数位数为负数。

得到这个数字后,将其设为正数,就得到了计算出的索引,可以在开始时放入 function 轮。

round(0.069/5, 3) * 5

您还需要在所有这些计算之前检查数字是否是一个完整数字(意味着没有小数位--17、290、34.0)(在这种情况下您根本不应该使用上面的代码),您可以轻松地通过使用模数,所以整体 function 看起来像这样:

 if number % 1 == 0:
     return round(int(number)/5)*5
 else:
     index = decimal.Decimal(str(number)).as_tuple().exponent
     return round(number/5, -index)*5

希望这有帮助!

在这里,感谢您提供其他解决方案:

import math
import decimal

def round_half_up(n):
    if (str(n).find(".") > 0):
        decimalsource = len(str(n).split(".")[1])
        base = 10**decimalsource
        number = n*base
        rounded = 5 * round(number/5)
        result = rounded / base
        if (result == int(result)):
            return int(result)
        else:
            return result
    else:
        return 5 * round(n/5)

      
print(round_half_up(1291))
print(round_half_up(0.069))
print(round_half_up(1.08))
print(round_half_up(14))
print(round_half_up(6))
print(round_half_up(12.121213))
print(round_half_up(12.3))
print(round_half_up(18.))
print(round_half_up(18))
问题未解决?试试本站强大的搜索功能,搜索: 将不同长度的数字舍入到最接近的 0 或 5
如何将数字舍入到最接近的1000?

[英]How to round numbers to the nearest 1000?

我有一些问题要将数字列表向上和向下舍入到最接近的1000。 以下是我的代码: 输出是: 我想将列表四舍五入到最接近的1000.我该怎么做? ...

选择不同长度的数字

[英]choose numbers of different lengths

我正在使用Python有2列的列表,中间有很多空白,例如: 我希望我的python代码抓住右边的数字。 最初,我是通过逐行并抓住line [15:24]或其他方法来执行此操作的-但是后来我意识到某些数字的长度不同,因此这行不通。 请问正确的方法是什么? ...

匹配两个不同长度的数据帧中的最近值

[英]Matching nearest values in two dataframes of different lengths

如果我有两个不同长度、不同标签和不同数字精度级别的数据框,如下所示: 如何找到两个数据帧在列“a”和“A”之间具有近似匹配值的行(例如在 2 位精度内),从而导致 dataframe 像这样 尝试: 尝试#1: 这仅在“a”和“A”列之间存在完全匹配时才有效,但我不确定如何合并一个软糖因子以允许匹配 ...

搜索不同长度的数字

[英]Searching numbers in line with different lengths

我得到了带有文本行的 GPS 日志文件 我的目标是打印纬度和经度的值,我能够做到这一点: 我认为这对我来说是完美的,我得到了很好的数字,例如: 但是实际上缺少数字,问题出在日志中,为纬度/经度生成的数字并不总是相同的长度,我从第一个字符的位置打印数字。 我试图只打印数字并用“,”分割它们 ...

通过最近观察到的日期时间索引组合 2 个不同长度的数据帧

[英]Combining 2 dataframes of different lengths by nearest observed datetime index

我目前正在尝试找到一种方法,根据日期时间索引将df2的特定行合并到df1 ,以避免前瞻偏差,以便我可以将外部特征 ( df2 ) 添加到用于 ML 应用程序的主数据集 ( df1 ) 中。 数据帧的长度不同,并且日期时间索引不会以恒定速率增加。 我目前的思考过程是通过使用嵌套循环和 if 语句来做到 ...

在 numpy 中舍入到最近的步骤

[英]Round in numpy to Nearest Step

我想知道如何将 numpy 中的数字舍入到上限或下限阈值,这是预定义步长的函数。 希望以更清晰的方式说明,如果我的数字为 123,步长等于 50,我需要将 123 取整到最接近的 150 或 100,在本例中为 100。我使用下面的函数来完成工作但我想知道是否有更好、更简洁的方法来做到这一点。 提 ...

四舍五入到最近的 integer

[英]Round number to nearest integer

我一直在尝试四舍五入长浮点数,例如: 到目前为止没有成功。 我尝试math.ceil(x) , math.floor(x) (尽管这会向上或向下舍入,这不是我想要的)和round(x)也不起作用(仍然是浮点数) . 我能做什么? 代码: ...

2015-08-04 19:51:39 16 598741   python
向上舍入到最接近的 0.05

[英]Round up to the nearest 0.05

我想将一个数字四舍五入到小数点后两位,例如: 如果数字以 1-4 结束,则舍入 5,如果数字 6-9,则舍入为 0 我如何舍入 = 谢谢你 ...

Python舍入到最接近的.0125

[英]Python round to nearest .0125

有人知道如何将数字四舍五入到最接近的.0125吗? 例如,有一个数字167.1131,则需要将其转换为167.1125。 我尝试用round入法将其round但round到0.x。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM