Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when reviewing utility functions, component props, or template strings that format numbers, prices, or dates to check whether Intl APIs are used correctly.
.claude/skills/thedaviddias-currency-formatting/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 26% | 0% |
| case-02 | ✓→✓ | = Same ✓ | -14% | 0% |
| case-03 | ✓→✓ | = Same ✓ | -13% | 0% |
| case-04 | ✓→✓ | = Same ✓ | -21% | 0% |
Number and currency formatting rules differ significantly across locales — a value formatted as "$1,234.56" in the US is written "1.234,56 $" in Germany and "¥1,235" in Japan. Hardcoded formatting causes incorrect display for international users and is expensive to maintain manually as you add locales.
Identify all places in this codebase where numbers, currencies, or dates are formatted manually instead of using Intl.NumberFormat or Intl.DateTimeFormat. Also flag locale-sensitive sorting that uses plain string comparison instead of Intl.Collator and any formatter that lacks a fallback locale.
Replace manual number and currency formatting with Intl.NumberFormat and replace manual date formatting with Intl.DateTimeFormat, passing the user locale explicitly. Use Intl.Collator for locale-aware sorting and resolve a supported fallback locale when the requested locale is unavailable.
Explain why locale-aware formatting with Intl APIs is required for international applications, what goes wrong when formatting is hardcoded, and why sorting/searching should also use locale-aware comparison.
Review utility functions and components that render numbers, prices, percentages, or dates. Flag any hardcoded currency symbols, separators, or date format strings, and show Intl-based alternatives.
For full implementation details, code examples, and framework-specific guidance, see references/rule.md.
Rule page: https://frontendchecklist.io/en/rules/i18n/currency-formatting
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 9,640 | 8,800 | -9% | 1 | 1 | 0% | 2,057 | 2,600 | +26% | 0 | 0 | — |
case-02 | pass→pass | 12,651 | 9,188 | -27% | 1 | 1 | 0% | 2,683 | 2,300 | -14% | 0 | 0 | — |
case-03 | pass→pass | 7,772 | 4,939 | -36% | 1 | 1 | 0% | 1,654 | 1,447 | -13% | 0 | 0 | — |
case-04 | pass→pass | 11,884 | 8,522 | -28% | 1 | 1 | 0% | 2,329 | 1,849 | -21% | 0 | 0 | — |
case-05 | pass→pass | 14,548 | 11,763 | -19% | 1 | 1 | 0% | 2,740 | 2,512 | -8% | 0 | 0 | — |
case-06 | fail→pass | 7,800 | 9,440 | +21% | 1 | 1 | 0% | 1,745 | 2,501 | +43% | 0 | 0 | — |
case-07 | pass→pass | 7,374 | 6,220 | -16% | 1 | 1 | 0% | 1,635 | 1,879 | +15% | 0 | 0 | — |
case-17 | pass→pass | 10,954 | 9,543 | -13% | 1 | 1 | 0% | 2,395 | 2,444 | +2% | 0 | 0 | — |
case-08 | pass→pass | 7,524 | 8,978 | +19% | 1 | 1 | 0% | 1,572 | 2,275 | +45% | 0 | 0 | — |
case-09 | pass→pass | 12,808 | 11,486 | -10% | 1 | 1 | 0% | 2,589 | 2,714 | +5% | 0 | 0 | — |
case-10 | pass→pass | 7,453 | 6,607 | -11% | 1 | 1 | 0% | 1,499 | 1,744 | +16% | 0 | 0 | — |
case-11 | pass→pass | 11,298 | 7,459 | -34% | 1 | 1 | 0% | 2,424 | 2,200 | -9% | 0 | 0 | — |
case-12 | pass→pass | 12,161 | 7,652 | -37% | 1 | 1 | 0% | 2,564 | 2,123 | -17% | 0 | 0 | — |
case-18 | pass→pass | 10,408 | 8,086 | -22% | 1 | 1 | 0% | 2,065 | 1,855 | -10% | 0 | 0 | — |
case-13 | pass→pass | 13,065 | 9,003 | -31% | 1 | 1 | 0% | 2,331 | 2,360 | +1% | 0 | 0 | — |
case-14 | pass→pass | 16,012 | 11,520 | -28% | 1 | 1 | 0% | 3,407 | 3,196 | -6% | 0 | 0 | — |
case-15 | pass→pass | 12,595 | 7,848 | -38% | 1 | 1 | 0% | 2,163 | 1,946 | -10% | 0 | 0 | — |
case-16 | pass→pass | 8,070 | 8,469 | +5% | 1 | 1 | 0% | 1,978 | 2,375 | +20% | 0 | 0 | — |
case-19 | pass→pass | 8,531 | 7,462 | -13% | 1 | 1 | 0% | 1,835 | 1,870 | +2% | 0 | 0 | — |
case-20 | pass→pass | 9,105 | 7,487 | -18% | 1 | 1 | 0% | 1,919 | 1,924 | +0% | 0 | 0 | — |
case-21 | pass→pass | 9,344 | 10,818 | +16% | 1 | 1 | 0% | 1,999 | 2,652 | +33% | 0 | 0 | — |
case-22 | pass→pass | 6,776 | 10,386 | +53% | 1 | 1 | 0% | 1,559 | 2,805 | +80% | 0 | 0 | — |
case-23 | pass→pass | 10,355 | 7,436 | -28% | 1 | 1 | 0% | 2,121 | 1,996 | -6% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +4 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.