How to convert {config.labels.in1} to {config.labels.in2}
- 1 {config.labels.in1} = {config.factor}{config.offset ? ` + ${config.offset}` : ''} {config.labels.in2}
+ 1 {config.labels.in1} = {formattedFactorValue}{hasOffset ? ` + ${formattedOffsetValue}` : ''} {config.labels.in2}
1 {config.labels.in2} = {formattedReverseValue} {config.labels.in1}
diff --git a/hdyc-svelte/src/lib/utils/conversionRate.ts b/hdyc-svelte/src/lib/utils/conversionRate.ts
index f464085..6f54a44 100644
--- a/hdyc-svelte/src/lib/utils/conversionRate.ts
+++ b/hdyc-svelte/src/lib/utils/conversionRate.ts
@@ -1,4 +1,5 @@
import type { CalculatorDef } from '$lib/data/calculators';
+import { formatConversionValue } from '$lib/utils/formatConversionValue';
type RateConfig = Pick;
@@ -12,5 +13,9 @@ export const getConversionRateText = (config: RateConfig): string | null => {
return null;
}
- return `1 ${in1} = ${config.factor}${config.offset ? ` + ${config.offset}` : ''} ${in2}`;
+ const formattedFactor = formatConversionValue(config.factor);
+ const hasOffset = Boolean(config.offset);
+ const formattedOffset = formatConversionValue(config.offset ?? 0);
+
+ return `1 ${in1} = ${formattedFactor}${hasOffset ? ` + ${formattedOffset}` : ''} ${in2}`;
};
diff --git a/hdyc-svelte/src/lib/utils/formatConversionValue.ts b/hdyc-svelte/src/lib/utils/formatConversionValue.ts
new file mode 100644
index 0000000..fb4adbd
--- /dev/null
+++ b/hdyc-svelte/src/lib/utils/formatConversionValue.ts
@@ -0,0 +1,17 @@
+export function formatConversionValue(value: number | null | undefined): string {
+ if (value === null || value === undefined || Number.isNaN(value)) {
+ return '—';
+ }
+ if (!Number.isFinite(value)) {
+ return value.toString();
+ }
+ if (value === 0) {
+ return '0';
+ }
+ const rounded = parseFloat(value.toFixed(6));
+ if (rounded !== 0) {
+ return rounded.toString();
+ }
+ const precise = value.toFixed(12).replace(/\.?0+$/, '');
+ return precise || '0';
+}
diff --git a/tests/test_conversion_rate_tooltip.py b/tests/test_conversion_rate_tooltip.py
new file mode 100644
index 0000000..43a0dd3
--- /dev/null
+++ b/tests/test_conversion_rate_tooltip.py
@@ -0,0 +1,27 @@
+import unittest
+from pathlib import Path
+
+ROOT = Path(__file__).resolve().parents[1]
+CONVERSION_RATE = (
+ ROOT / "hdyc-svelte" / "src" / "lib" / "utils" / "conversionRate.ts"
+)
+
+
+class ConversionRateTooltipFormattingTests(unittest.TestCase):
+ def test_conversion_rate_text_uses_formatter(self) -> None:
+ text = CONVERSION_RATE.read_text(encoding="utf-8")
+ normalized = " ".join(text.split())
+ self.assertIn(
+ "formatConversionValue(config.factor)",
+ normalized,
+ "Conversion rate helper must format the factor before inserting it into the tooltip text",
+ )
+ self.assertIn(
+ "formatConversionValue(config.offset ?? 0)",
+ normalized,
+ "Conversion rate tooltip must format any offset before rendering",
+ )
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/tests/test_quick_conversion_formatting.py b/tests/test_quick_conversion_formatting.py
new file mode 100644
index 0000000..5b53a1d
--- /dev/null
+++ b/tests/test_quick_conversion_formatting.py
@@ -0,0 +1,26 @@
+import unittest
+from pathlib import Path
+
+ROOT = Path(__file__).resolve().parents[1]
+QUICK_CONVERSION_EXAMPLE = (
+ ROOT / "hdyc-svelte" / "src" / "lib" / "components" / "QuickConversionExample.svelte"
+)
+
+
+class QuickConversionExampleFormattingTests(unittest.TestCase):
+ def test_formula_uses_formatted_factor_and_offset(self) -> None:
+ text = QUICK_CONVERSION_EXAMPLE.read_text(encoding="utf-8")
+ normalized = " ".join(text.split())
+ snippet = (
+ "1 {config.labels.in1} = {formattedFactorValue}{hasOffset ? ` + ${formattedOffsetValue}` : ''} "
+ "{config.labels.in2}"
+ )
+ self.assertIn(
+ snippet,
+ normalized,
+ "The formula snippet should render formatted factor/offset values instead of raw floats",
+ )
+
+
+if __name__ == "__main__":
+ unittest.main()