python

时间:2015-05-12 04:42:27

标签: python

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

float_a = 12.200
float_b = 14.0
float_c = 14.01880

我想从中删除小数点。

预期结果

"12200"
"140"
"1401880"

我必须小心,因为这些不是定点值,我无法控制我的输入将达到多少小数位。评论中有更多例子:

  1. 1.10
  2. 1.110
  3. 2.0
  4. 2.1340
  5. 预期结果:

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

5 个答案:

答案 0 :(得分:3)

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

  

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

     

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

     

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

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

答案 1 :(得分:2)

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

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

它只删除.并将结果字符串解析为int。否则,只需先将str投射到 protected void onActivityResult(int requestCode, int resultCode, Intent intentData) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, intentData); if(requestCode == REQUEST_CODE && resultCode == RESULT_OK){ locationLat = intentData.getDoubleExtra("LocationLat", 0.0); locationLng = intentData.getDoubleExtra("LocationLang", 0.0); location = locationLat + " "+locationLng; if(location != ""){ Toast.makeText(this, location, Toast.LENGTH_LONG).show(); if(lblName==null) { lblName = new TextView(this); lblName.setId(9); lblName.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); LinearLayout ll = (LinearLayout) findViewById(R.id.llOne); ll.addView(lblName, 5); Button btnSetLoc = (Button) findViewById(R.id.getLoc); btnSetLoc.setText("Change Location"); } lblName.setText(location); } else{ Toast.makeText(this, "location is not set", Toast.LENGTH_LONG).show(); } } }

答案 2 :(得分:1)

这只是一个格式化问题。其中任何一个都可以获得尾随零:

>>> '{:.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 :(得分:0)

如果要删除小数,为什么不乘以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"

答案 4 :(得分:0)

如果您要询问如何将float_a = 12.200转换为字符串&#34; 12200&#34;,只需将其乘以1000,然后再将其转换为字符串,例如:< / p>

print(str(float_a * 1000))

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

但是,由于您正在谈论它并且总是删除0&#34;,我怀疑您可能错过了预期输出中的.。在这种情况下,要显示具有固定小数位数的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

这是一个&#34;限制&#34;数据类型,你无能为力。你想要一个定点类型或something to handle "decimal numbers",而不是浮点数。