Python一行代码将浮点数转换为字符串

3
我希望将介于0.0和39.9之间的浮点数转换为字符串。如果十位是1、2或3,则用L、T或Y替换。如果个位是1-9,则在其后添加M。例如,22.3将返回T2.3,8.1将返回M8.1等。否则,返回浮点数本身。
以下是代码示例:
def specType(SpT):
  if 0 <= SpT <= 9.9:
    return 'M{}'.format(SpT)
  elif 10.0 <= SpT <= 19.9:
    return 'L{}'.format(SpT - 10)
  elif 20.0 <= SpT <= 29.9:
    return 'T{}'.format(SpT - 20)
  elif 30.0 <= SpT <= 39.9:
    return 'Y{}'.format(SpT - 30) 
  else:
    return SpT

谢谢!


6
使用所有的float比较(例如 SpT <= 9.9 等)时,必须小心。 - NPE
1
+1,NPE。当SpT为9.95时,期望的输出是什么?因为它大于9.9且小于10.0,所以它会掉进漏洞并到达return SpT行。 - Kevin
这是一个很好的观点。最好考虑到它,但实际上,在应用程序中永远不会出现。 - Joe Flip
1个回答

10

如何?

def specType(SpT):
    return '{}{}'.format('MLTY'[int(SpT//10)], SpT % 10) if 0.0 <= SpT <= 39.9 else SpT

提供

>>> specType(0.0)
'M0.0'
>>> specType(8.1)
'M8.1'
>>> specType(14.5)
'L4.5'
>>> specType(22.3)
'T2.3'
>>> specType(34.7)
'Y4.7'

[正如评论中所指出的,你需要考虑那些可能越过边界的数字怎么处理——我猜测了其中一种方法,请根据实际情况进行修改。]


1
哇塞,我的脑回路被打开了!我从来不知道你可以用 // 进行注释! - jackcogdill
1
@yentup 你也可以使用 divmod :) - Lev Levitsky
@yentup 这是一篇不错的文章 :) 我还有另外两个收藏夹链接:内置类型数据模型(后者可能会更高级些)。 - Lev Levitsky
太棒了!就是这样。谢谢! - Joe Flip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接