【问题标题】:How to show decimal point only when it's not a whole number?仅当它不是整数时如何显示小数点?
【发布时间】:2020-04-09 23:43:48
【问题描述】:

我用 Google 搜索过,但找不到正确的答案。

假设我们有浮点数,我们得到它们的平均值。他们的平均值是这样的:

3.5
2.5
5
7

所以我们有 4 个数字(不再在列表中)。两个数字,一个小数,两个整数。

我想做的是,打印这些数字并保持这样的状态。不过,我的问题是,当我使用%.1f 时,它会从 5 和 7 生成 5.0 和 7.0,而我想保持它们原样(所以保持它们作为一个整数)

所以我想按原样打印它们,但我不知道如何。浮点数将decimal 点添加到整数。将它们转换为 int,会删除所需的小数。

这两个选项都不是我想要的。

有人能指出正确的方向吗?

编辑:相关代码,按要求:

# I have a list of numbers and I am calculating their average and rounding them first.
get_numbers = map(float, line[-1])
average_numbers = sum(get_numbers) / len(get_numbers)
rounded_numbers= round(average_numbers * 2) / 2

# So now, I've got the numbers: 3.5, 2.5, 5, 7

print "The numbers are: %.1f" % (rounded_numbers)

【问题讨论】:

  • 将它们转换为整数
  • 请澄清 - 你的 4 个数字实际上是 float, float, int, int,还是都是浮动的?请注意,如果您的输入实际上是 int,is_integer 解决方案将不起作用,如果您的所有输入实际上都是浮点数,format 解决方案将不起作用。
  • 都是花车。有些是圆形的,有些不是。

标签: python


【解决方案1】:

您可以使用浮点数的is_integer 方法。如果浮点数可以表示为整数(换句话说,如果它的形式为X.0),则返回True

li = [3.5, 2.5, 5.0, 7.0]

print([int(num) if float(num).is_integer() else num for num in li])
>> [3.5, 2.5, 5, 7]

编辑

在 OP 添加他们的代码之后:

您应该对计算的平均值使用相同的逻辑,而不是像上面的原始示例那样使用列表推导:

get_numbers = map(float, line[-1])  # assuming line[-1] is a list of numbers
average_numbers = sum(get_numbers) / len(get_numbers)
average = round(average_numbers * 2) / 2
average = int(average) if float(average).is_integer() else average
print average  # this for example will print 3 if the average is 3.0 or
               # the actual float representation. 

【讨论】:

  • 这会在使用来自 OP 的数据时引发“int object has no attribute 'is_integer'”错误。虽然它是多余的,但也许将num.is_integer() 更改为float(num).is_integer()
  • @ScottMermelstein 我相信 OP 的输入都是浮点数,否则他们一开始就不会有这个问题,但为了安全起见,我会添加 float(...)
  • 老实说,我相信你是对的。浮点转换不应该是必要的。但它确保您不会收到错误,因此感谢您添加它。 :-)
  • 谢谢,但它说:“'float' object is not iterable”
  • @Siyah 你只有一个号码。我的回答假设您有一个数字列表。
【解决方案2】:

与上一个答案类似:

[int(i) if int(i) == i else i for i in li]

或者:

[int(i) if not i % 1 else i for i in li]

【讨论】:

    【解决方案3】:

    从技术上讲,如果你有浮点数并得到它们的平均值,你应该得到浮点数。但是,如果您只想打印它们,则以下内容应该可以正常工作:

    print('{} {} {} {}'.format(3.5, 2.5, 5, 7))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2012-10-23
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多