Calculate Discount - JS Fundamentals

Здравейте на всички!

Имам проблем с въпросната задача, на която тест номер 4 не ми минава и не мога да проумея защо. В главата ми се върти само проблем със закръглянето на числата, но дори тогава по пътя на логиката щеше да има повече от 1 fail test. Ще се радвам на насоки.

Кода ми е:

Проваленият тест връща output:
6.30
4.72

Условието е следното:

Calculate Discount

You need to calculate the discounted price for each item in your shopping cart. The discount is 65%, a real deal for you.

Input

  • On the first line, you will receive N - the number of the items in your shopping cart
  • On the next N lines you will each item’s price

Output

  • On each line in the output print the discounted price of the item with two digits after the decimal point (Math rules for rounding apply)

Input

2
50
40

Output

17.50
14.00

Input

4
9.99
19.99
29.99
39.99

Output

3.50
7.00
10.50
14.00

Здрасти,

Проблема идва от .toFixed(2). Още в задачата имаш, че (Math rules for rounding apply), тоест от 5 включително закръгляме. toFixed() закръгля от 6 включително и именно затова ти гърми 4-тия тест. Ако пейстнеш кода си в judge с .toFixed(3) ще видиш, че аутпута ти е 4.725 и следователно judge очаква 4.73, а твоят код го закръгля на 4.72. Помисли как можеш да се справиш с този проблем. Аз още при изчисляването на отстъпката съм я пресметнал с 3 знака след запетаята(toFixed(3)) - 4.725, след това умножавам по 100 и давам toFixed(1), за да остане зад запетаята само третият знак. В случая с въпросния тест-кейс ще остане 472.5, на което давам Math.round, за да го закръгли и накрая разделям резултата на 100 и принтирам с два знака след десетичната запетая. 472.5 след Math.round става 473, което разделено на 100 е 4.73 и винаги принтираме с toFixed(2), понеже без него, в случаите, в които имаме нули след запетаята, те няма да се изпишат. Но със сигурност има и по-рационално решение. :smiley: