Update app.py
Browse files
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 |
-
|
| 84 |
|
| 85 |
for i in range(1, len(terms)):
|
| 86 |
-
value2, unit2 = parse_value_unit(terms[i])
|
| 87 |
-
|
| 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: {
|
| 102 |
|
| 103 |
# 最も少ない有効数字に基づいて丸める
|
| 104 |
-
min_sig_figs = min(
|
| 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 |
|