【问题标题】:Problem with multiple decimal points (Python)多个小数点的问题(Python)
【发布时间】:2022-11-23 15:54:31
【问题描述】:

我有一点问题:

我正在尝试转换这些数字:

-0.2179, -8.742.754.508, 1.698.516.678,

-0.22, -8.74, 1.70,

但是当小数点位数不同时,我真的不确定该怎么做?

我试过 .split('.') 但很难更改小数点。

我想知道你们是否对这个小问题有任何指示?亲切的问候。

for number in data.fundreturn:
    
        new_number = number.split('.')[0]
        fund.append(new_number)
   
    
for number in data.bitcoinreturn:
    
        new_number = number.split('.')[0]
        bitcoin.append(new_number)
        

但后来我得到 0、8 和 1

代码 sn-p 基本上是我遍历每一列并试图隐藏值。

【问题讨论】:

  • 你的号码是从哪里来的?您的数字字符串是在文件中还是在 float 列表中?举个data.fundreturn的例子
  • 从 CSV 文件中,floats data.fundreturn 是我数据框中一列上面的数字。我正在尝试转换它们,但它们的小​​数点数不同
  • 从 CSV 文件确定。目前 data.fundreturn 的类型是什么?列表 [str] 或列表 [float] ?阅读您的示例 II 假设一个字符串列表。
  • 那是一个真的奇怪的格式。 . 是否同时用作小数点分隔符作为千位分隔符?我们怎么知道 -8.742.754.508 等于负八一点,而不是负八千,或者负八百万,或者负八十亿?这是哪个地区?
  • 有人告诉我,这些代表资产价格的每日百分比变化。所以 -8.742.754 将是 -8.7% 的每日变化 我同意格式很奇怪

标签: python


【解决方案1】:

如果我正确理解您的问题,那么如果像这样使用 split 函数就足以作为解决方案:

data = ["-0.2179", "-8.742.754.508", "1.698.516.678"]
fund = []
for number in data:
    split = number.split('.')
    integer_part = split[0]
    fractional_part = ''.join([split[i] for i in range(1, len(split))])
    new_number = float('.'.join((integer_part, fractional_part)))
    # rounding to two decimal points
    new_number = round(new_number, 2)
    fund.append(new_number)

print(fund)

【讨论】:

  • 我为此得到索引超出范围
  • 我编辑了代码,现在修复了吗?
【解决方案2】:

此解决方案考虑了第一个点之后的小数部分并忽略了字符串的其余部分。

def convert(number: str) -> float:
    n = number.split(".")
    return float(n[0]) if len(n)<2 else float(f"{n[0]}.{n[1]}")

convert("32")  # 32.0
convert("-8.742.754.508")  # -8.742

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多