Код Junior Базовые типы обновлено
Разбор суммы из формы: Result с кодами ошибок
Условие
Пользователь вводит сумму в рублях: 1 234,50, 1234.5, 99. Напиши parseAmount(input: string): ParseResult, где
type ParseResult = { ok: true; kopecks: number } | { ok: false; error: 'empty' | 'format' | 'negative' | 'too_large' }.
Правила: пробелы (в том числе неразрывные \u00A0) внутри и по краям убираются; разделитель дробной части запятая или точка; не больше 2 знаков после разделителя; минус в начале даёт negative; больше 1 000 000 рублей too_large; пусто empty; всё остальное format.
Примеры
parseAmount("1 234,50") // {"ok":true,"kopecks":123450}
parseAmount("1234.5") // {"ok":true,"kopecks":123450}
parseAmount(" 99 ") // {"ok":true,"kopecks":9900}
Как подойти
Подсказки: 2
- Сначала нормализуй строку, потом одна регулярка на формат.
- Не считай через
parseFloat(...) * 100: 1.15 * 100 это 114.99999999999999.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Branded id: не перепутать UserId и OrderId
Следующий вопрос
Справочник валют через satisfies и суммы по валютам