【问题标题】:Need matching digits between two decimals需要两位小数之间的匹配数字
【发布时间】:2018-07-06 04:50:23
【问题描述】:

假设我有 2 个小数(浮点数)。

a = 123.62903
b = 123.6233

现在我希望结果匹配这个小数的位数。所以这里的结果应该是

123.62.

如果,

a =234.2387
b =232.2138

那么,结果应该是

结果 = 23。

这将是一个很大的帮助,谢谢。

【问题讨论】:

  • a = 112.6 和 b = 212.6 的输出应该是什么?没有匹配或 12.6?

标签: python decimal matching digits


【解决方案1】:

使用zip 和一个简单的迭代。

演示:

a = 123.62903
b = 123.62333

res = ''
for i, v in zip(str(a), str(b)):
    if i != v:
        break
    else:
       res += v

if res:
    print(float(res) if "." in res else int(res))

输出:

123.62

【讨论】:

  • 如果第一个数字不匹配但后面的数字匹配怎么办?
  • 例如 a =2234.2387 b =1232.2138,这里第一个数字不匹配,但接下来的几个匹配。在这种情况下。
  • 而且之前有可能根本找不到匹配项,这可能会导致错误。您解决了它并进行了编辑。干得好!
【解决方案2】:

如果你想在 O(1) 中完成,数学是你的朋友。 :-)

import math

def common(a, b):
    def trunc(x, precision):
        return math.floor(x / precision) * precision
    precision = math.pow(10, math.ceil(math.log10(math.fabs(a - b))))
    common = trunc(a, precision)
    if common == trunc(b, precision):
        return common
    else:
        return trunc(a, precision * 10)

print(common(123.62903, 123.6233))
print(common(234.2387, 232.2138))
print(common(123.62903, 112.21))

这个输出:

123.62
230.0
100.0

【讨论】:

  • 它为数字 a = 2123.62903 b = 1123.6233 打印 2000.0
  • 好收获。通过将int 替换为math.ceil 来修复它。
  • 好。但我认为仍然存在错误。对于 a = 1123.62903 b = 2123.6233 它会引发错误 ValueError: math domain error
  • 我猜你必须保持两者中最大的
  • 如果 a=123.62903 和 b = 112.xx 预期结果 = 1。但是这个结果是 120
猜你喜欢
  • 1970-01-01
  • 2012-08-20
  • 2014-11-15
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
相关资源
最近更新 更多