Przelicznik dolarów na yuany

0

Kolejne zadanie z code wars. Muszę napisać przelicznik walut z dolarów amerykańskich na chiskie yuany. Oto treść zadania https://www.codewars.com/kata/5977618080ef220766000022/train/javascript. Napisałem swój kod który wygląda tak

function usdcny(usd) {
  let amountCNY = '6.75';
  if((amountCNY.charAt(amountCNY.length - 1) < 2)){
    return usd * parseFloat(amountCNY).toFixed(2) + ' Chinese Yuan'; 
  }else{
    return usd * amountCNY + ' Chinese Yuan'; 
  }
}

i działa on w 90%. Nie działa tylko gdy otrzymuje liczbę z zerami na końcu. Jeśli powinienem dostać np.17253.00 to dostaje 17253 Pomyślałem sobie żeby napisać warunek który by mi sprawdzał czy występuje na końcu jedno lub dwa zera i w ten sposób dodawać na końcu odpowiednią ilość zer za pomocą metody toFixed. Pytanie tylko co robię źle? Próbowałem na wszelkie sposoboy ale nie chce zadziałać

5
const USD_TO_CNY = 6.75;
const usdcny = usd => `${(usd * USD_TO_CNY).toFixed(2)} Chinese Yuan`;

Co robisz źle - używasz toFixed nie na całym wyniku tylko na Twojej stałej (która nie wiedzieć czemu jest stringiem i nie jest stałą bo użyłeś let).

1

Załózmy, że if ma sensowny warunek. Gdy amountCNY miałaby wartość 6 (czyli if-a się nie spełni) wtedy w wielu przypadkach wyświetli się coś w tym rodzaju "74.03999999999999 Chinese Yuan" bo w else nie używasz toFixed(). If nie jest potrzebny bo w każdym z przypadków musisz użyć toFixed() jeżeli twoim celem jest wyświetlenie wiadomości z kwotą (nie wyświtla się użytkownikowi pieniędzy z dokładnością większą niż 2 miejsca po przecinku).

Powodem dlaczego twój kod nie działał jak chciałeś (oprócz warunku) jest to usd * parseFloat(amountCNY).toFixed(2) w tym wypadku mówisz, że to amountCNY ma być toFixed(2) a nie wynik tego mnożenia. To co chciałeś zrobić powinno wyglądać tak (usd * parseFloat(amountCNY)).toFixed(2).

Zwyczajnie najlepiej jak zapiszesz to tak jak @Markuz ale jako, że pisałeś, że dopiero się uczysz, to możesz nie znać Arrow Functions. Poprawiona wersja twojego kodu w może nieco bardziej zrozumiałym dla początkujących zapisie:

function usdcny(usd) {
  const USD_TO_CNY = 6.75;
  return (usd * USD_TO_CNY).toFixed(2) + ' Chinese Yuan'; 
}

Jak zmienisz zmienną na string to też zadziała. Przy mnożeniu, dzieleniu i odejmowaniu string jest zamieniany na number (przy dodawaniu następuje konkatenacja). Zamiast parseFloat() możesz użyć znaku plusa np. +USD_TO_CNY albo +"23" wtedy też dostaniesz number. Używaj let tylko gdy musisz, jeżeli nie jest to potrzebne to używaj const.

1 użytkowników online, w tym zalogowanych: 0, gości: 1