串列中的a值是來自 API 的數學除法值。
要將字串轉換為計算,我使用eval().
中的值correct_list是此除法的最終結果 add 1。
API 表明這是使用其資料進行計算的確切結果。
但是當這些除法有幾個小數時我遇到了困難,我嘗試格式化每個模型以使小數的限制為 2,創建的串列與正確的結果不完全匹配:
import math
import decimal
decimal.getcontext().rounding = decimal.ROUND_CEILING
def main():
a = ['11/10', '29/20', '5/4', '1/2', '10/11', '2/1', '4/7', '11/8', '13/10', '1/8', '4/11', '5/4', '163/100', '11/20', '17/20', '23/20', '6/4', '1/1', '8/5']
b = []
correct_list = ['2.10', '2.45', '2.25', '1.50', '1.91', '3.00', '1.57', '2.38', '2.30', '1.13', '1.36', '2.25', '2.63', '1.55', '1.85', '2.15', '2.50', '2.00', '2.60']
for c in a:
b.append(f'{round(eval(c) 1, ndigits=2)}')
print(b)
if b == correct_list:
print('Ok. Amazing Match!')
if __name__ == '__main__':
main()
這些都是我的嘗試:
b.append(f'{eval(c) 1:.2f}')
['2.10', '2.45', '2.25', '1.50', '1.91', '3.00', '1.57', '2.38', '2.30', '1.12', '1.36', '2.25', '2.63', '1.55', '1.85', '2.15', '2.50', '2.00', '2.60']
b.append(f'{math.ceil((eval(c) 1) * 100.0) / 100.0:.2f}')
['2.10', '2.46', '2.25', '1.50', '1.91', '3.00', '1.58', '2.38', '2.30', '1.13', '1.37', '2.25', '2.63', '1.55', '1.85', '2.15', '2.50', '2.00', '2.60']
b.append(f'{float(round(decimal.Decimal(str(eval(c) 1)), ndigits=2)):.2f}')
['2.10', '2.45', '2.25', '1.50', '1.91', '3.00', '1.58', '2.38', '2.30', '1.13', '1.37', '2.25', '2.63', '1.55', '1.85', '2.15', '2.50', '2.00', '2.60']
b.append(f'{round(eval(c) 1, ndigits=2):.2f}')
['2.10', '2.45', '2.25', '1.50', '1.91', '3.00', '1.57', '2.38', '2.30', '1.12', '1.36', '2.25', '2.63', '1.55', '1.85', '2.15', '2.50', '2.00', '2.60']
沒有提供與 API 計算模型完全匹配的結果。
uj5u.com熱心網友回復:
round()正常函式無法按您想要的方式處理的唯一情況是它0.005向下舍入到0.00而不是向上舍入0.01。因此,如果您愿意變得俗氣,只需添加 1.001 而不是 1,然后使用正常四舍五入。
a = ['11/10', '29/20', '5/4', '1/2', '10/11', '2/1', '4/7', '11/8', '13/10', '1/8', '4/11', '5/4', '163/100', '11/20', '17/20', '23/20', '6/4', '1/1', '8/5']
correct_list = ['2.10', '2.45', '2.25', '1.50', '1.91', '3.00', '1.57', '2.38', '2.30', '1.13', '1.36', '2.25', '2.63', '1.55', '1.85', '2.15', '2.50', '2.00', '2.60']
b = [f'{float.__truediv__(*map(float, c.split("/"))) 1.001:.2f}' for c in a]
if b == correct_list:
print('Ok. Amazing Match!') # succeeds
如果你想使用decimal模塊以一種不俗的方式來做,你需要用Decimal物件做數學運算,你想要的舍入方法是ROUND_HALF_UP.
import decimal
decimal.getcontext().rounding = decimal.ROUND_HALF_UP
a = ['11/10', '29/20', '5/4', '1/2', '10/11', '2/1', '4/7', '11/8', '13/10', '1/8', '4/11', '5/4', '163/100', '11/20', '17/20', '23/20', '6/4', '1/1', '8/5']
correct_list = ['2.10', '2.45', '2.25', '1.50', '1.91', '3.00', '1.57', '2.38', '2.30', '1.13', '1.36', '2.25', '2.63', '1.55', '1.85', '2.15', '2.50', '2.00', '2.60']
b = []
for c in a:
n, d = map(int, c.split("/"))
result = decimal.Decimal(1) decimal.Decimal(n) / decimal.Decimal(d)
b.append(f'{result:.2f}')
if b == correct_list:
print('Ok. Amazing Match!') # succeeds
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474851.html
