OzoneAsai commited on
Commit
298518f
·
verified ·
1 Parent(s): 8aebab8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +7 -7
app.py CHANGED
@@ -42,7 +42,7 @@ def parse_value_unit(value_unit_str):
42
  if match:
43
  value, unit = match.groups()
44
  log(f"Parsed value: {value}, unit: {unit}")
45
- return Decimal(value), unit
46
  else:
47
  raise ValueError("Invalid format. The input should be in the form 'value[unit]'.")
48
 
@@ -77,14 +77,14 @@ def calculate_expression(expression):
77
  raise ValueError("Invalid expression format")
78
 
79
  # 最初の項目を取得
80
- value1, unit1 = parse_value_unit(terms[0])
81
  total_value = value1
82
  total_unit = unit1
83
- decimal_places_list = [len(str(value1).replace('.', '').replace('-', ''))] # 有効数字のリストを保存
84
 
85
  for i in range(1, len(terms)):
86
- value2, unit2 = parse_value_unit(terms[i])
87
- decimal_places_list.append(len(str(value2).replace('.', '').replace('-', '')))
88
 
89
  if unit1 != unit2 and ('*' not in expression and '/' not in expression):
90
  value2 = convert_to_common_unit(value2, unit2, unit1)
@@ -98,10 +98,10 @@ def calculate_expression(expression):
98
  else:
99
  total_value += value2
100
 
101
- log(f"Current total: {total_value}, current significant figures list: {decimal_places_list}")
102
 
103
  # 最も少ない有効数字に基づいて丸める
104
- min_sig_figs = min(decimal_places_list)
105
  rounded_result = total_value.quantize(Decimal('1e{0}'.format(-(min_sig_figs - 1))), rounding=ROUND_HALF_UP)
106
  log(f"Final result: {rounded_result} [{total_unit}]")
107
 
 
42
  if match:
43
  value, unit = match.groups()
44
  log(f"Parsed value: {value}, unit: {unit}")
45
+ return Decimal(value), unit, len(value.split('.')[1]) if '.' in value else 0
46
  else:
47
  raise ValueError("Invalid format. The input should be in the form 'value[unit]'.")
48
 
 
77
  raise ValueError("Invalid expression format")
78
 
79
  # 最初の項目を取得
80
+ value1, unit1, sig_figs1 = parse_value_unit(terms[0])
81
  total_value = value1
82
  total_unit = unit1
83
+ sig_figs_list = [sig_figs1]
84
 
85
  for i in range(1, len(terms)):
86
+ value2, unit2, sig_figs2 = parse_value_unit(terms[i])
87
+ sig_figs_list.append(sig_figs2)
88
 
89
  if unit1 != unit2 and ('*' not in expression and '/' not in expression):
90
  value2 = convert_to_common_unit(value2, unit2, unit1)
 
98
  else:
99
  total_value += value2
100
 
101
+ log(f"Current total: {total_value}, current significant figures list: {sig_figs_list}")
102
 
103
  # 最も少ない有効数字に基づいて丸める
104
+ min_sig_figs = min(sig_figs_list)
105
  rounded_result = total_value.quantize(Decimal('1e{0}'.format(-(min_sig_figs - 1))), rounding=ROUND_HALF_UP)
106
  log(f"Final result: {rounded_result} [{total_unit}]")
107