【问题标题】:Decimal points in python [closed]python中的小数点[关闭]
【发布时间】:2015-07-22 19:09:55
【问题描述】:

我有一些浮点值,这些值都是动态生成的:

float_a = 12.200
float_b = 14.0
float_c = 14.01880

我想去掉小数点。

预期结果

"12200"
"140"
"1401880"

我必须小心,因为这些不是定点值,而且我无法控制输入的小数位数。来自 cmets 的更多示例:

  1. 1.10
  2. 1.110
  3. 2.0
  4. 2.1340

预期结果:

  1. “110”
  2. “1110”
  3. “20”
  4. “21340”

【问题讨论】:

  • 它不是像 a = 1.10, b= 1.110, c = 2.0,d = 2.1340 这样的固定值,结果我需要 a = "110", b = "1110", c = "20" , d = "21340"
  • 无论这个值是从哪里来的,它一开始都不是一个浮点数。您需要避免将其变成浮点数,因为 12.20012.2 将评估为相同的浮点数。
  • 如果确实是浮点数,则无法区分用于将 a 设置为 12.2 的值。即,事后您无法判断a=12.2a=12.200 这似乎是这个问题的前提。

标签: python


【解决方案1】:

如果您要问如何将float_a = 12.200 转换为字符串“12200”,只需将其乘以1000,然后再转换为字符串,例如:

print(str(float_a * 1000))

但是,如果数字包含超过 4 个小数位,您仍然会有小数。

但是,由于您说的是“始终删除 0”,我怀疑您可能在预期输出中错过了 .。在这种情况下,要显示具有固定小数位数的float,只需使用 Python 的内置字符串格式:

float_a = 12.200
expected_result = '%.2f' % float_a

print expected_result

> 12.20

如果这没有意义,请稍微澄清一下您的问题,我会进行编辑! :)

编辑

在您进一步澄清问题后,您似乎想定义一个带有尾随零的 float 并保留它们,并将 float 转换为保留前导零的字符串。如果您的输入类型是float,恐怕这是不可能的,因为float 不会保留那些尾随零开头:

在 [1] 中:float_a = 3.1400

在 [2] 中:float_a 出局[2]:3.14

这是数据类型的“限制”,您对此无能为力。您需要定点类型或something to handle "decimal numbers",而不是浮点数。

【讨论】:

    【解决方案2】:

    这只是一个格式问题。这些都可以得到尾随零:

    >>> '{:.3f}'.format(1.2)
    '1.200'
    >>> '%0.3f' % (1.2,)
    '1.200'
    

    然后:

    >>> '{:.3f}'.format(12.2).replace('.','')
    '12200'
    

    从你的例子中得到你想要的:

    vals=(1.10, 1.110, 2.0, 2.134)
    
    def wid(f):
        w=1
        while True:
            s='{:.{w}f}'.format(f, w=w)
            if s[-1]=='0' or w>5:
                break
            w+=1    
        return w
    
    for e in vals:
        s='{:.{w}f}'.format(e, w=wid(e)).replace('.','')
        print '{:10} => {}'.format(e, s)
    

    打印:

       1.1 => 110
      1.11 => 1110
       2.0 => 20
     2.134 => 21340
    

    【讨论】:

      【解决方案3】:

      这个问题似乎是另一个已经回答的问题的排列:

      前导零的概念是一个显示概念,而不是数字 一。您可以在数字上放置无限数量的前导零 在不改变其价值的情况下。因为它不是一个数字概念,所以它不是 与号码一起存储。

      您必须在转换数字时决定需要多少个零 到一个字符串。如果需要,您可以单独保留该号码。

      来源:Python Force python to keep leading zeros of int variables

      看起来你要求的唯一方法是你的初始“Float”是否为字符串形式,否则后面的 0 将被丢弃。如果您设法将“Float”作为字符串获取(在它成为浮点数之前),那么您可以使用上面提到的int('12.200'.replace('.', '')) 方法

      【讨论】:

      • 你好混合,在这种情况下,我们无法决定放多少个零。
      • 我明白,但我的意思是,既然是这样,就不可能按照你的要求去做,除非初始值是string 形式。第二个它被转换为float,后面的 0 被删除。
      • @TidyWay 不幸的是,这是浮点值,不存储 ptecission 值。例如,使用 Decimal 之类的其他内容。
      • 谢谢混合,@joojaa 你能举个例子吗?
      【解决方案4】:

      如果要去掉小数,何不乘以1000

      float_a = 12.200
      print str(int(float_a*1000))
      

      当你有

      float_a = 1.110
      float_b = 1.1100
      float_c = 1.11000
      

      Python 正在丢弃尾随零,上面的 3 个完全相同。这些尾随零是非有效数字,因此如果您想实际保留它们,您的原始数据类型将需要是字符串。

      如果你做出改变,那么做起来很简单

      float_a = "1.110"
      print float_a.replace('.', '') #  "1110"
      

      【讨论】:

      • 您的第一个解决方案更好,因为 OP 没有使用固定数字。
      • 唯一的问题是,如果原始值是浮点数,我不知道字符串应该有多少个尾随零。
      • ts 不是固定值,例如 a = 1.10, b= 1.110, c = 2.0,d = 2.1340,结果我需要 a = "110", b = "1110", c = "20" , d = "21340", 我怎么知道它会乘以 1000 :) 有时值也有 2 个小数。
      【解决方案5】:

      如果你从一个字符串开始,我认为你是。我会使用类似的东西:

      >>> int('12.200'.replace('.',''))
      12200
      

      它只是删除. 并将生成的字符串解析为int。否则,请先将您需要的任何内容投射到str

      【讨论】:

      • 不是字符串,是浮点数
      • "否则就先把你必须的东西投射到 str 上。"您不能先将其转换为字符串。如果它最初是一个浮点数,则删除尾随零。
      • 如果您的代码中有这些浮点数,那么只需删除其中的点即可。您不能在 python 代码中放置千位分隔符。或者至少你不应该。否则,你怎么得到它们?
      • 这个配置怎么读?是直接在“用户”要编辑的代码处吗?如果是这样,我认为这听起来非常错误。也许让它从一个单独的文件中读取并正确解析(就像我的回答一样)。或者,如果必须在代码中,用" 包围它们有什么问题?而不是a = 12.000,你将拥有a = "12.200",然后做剩下的......
      • 你需要更清楚这一点。举一个如何检索该字段的完整示例。 “我从订单中读取浮点值”是什么意思?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多