[Exam Problems] JavaScript Basics - Problem {3} - Biggest Table Row (29 July 2014) - Софтуерен университет

[Exam Problems] JavaScript Basics - Problem {3} - Biggest Table Row (29 July 2014) - Софтуерен университет

+ Нов въпрос
a.polyanska avatar a.polyanska 107 Точки

[Exam Problems] JavaScript Basics - Problem {3} - Biggest Table Row (29 July 2014)

Здравейте,

Искам да помоля да погледнете кода ми на задачата от изпита на 29.07. Гърми на половината тестове, защото по някаква, неизвестна за мен причина, пресмята грешно- парсва числата за сумиране правилно, но пресмята сумата грешно.  Половината тестове, обаче ги минава. Ще съм ви благодарна, ако ми посочите грешката. На тестът, който съм сложила в кода ми дава сумата с две повече, отколкото трябва, а когато пусна през дебъгера виждам, че когато извършва предишните пресмятания (преди да стигне до най-голямата сума), когато събира десетичните числа вместо, примерно да получи нещо.13, получава нещо. 129999999999999999999, въпреки че събираемите са си закръглени до втори знак след запетаята.

Ето кода

Благодаря!

 Mod Edit: Обърни внимание на именуване на теми във форума спрямо Правилата: виж т. 9.

0
JavaScript Fundamentals 21/11/2014 11:09:56
a.angelov avatar a.angelov 1332 Точки
Best Answer

Та значи:

1. sum = 0; ти е вътре във втория цикъл, изнеси го извън него - зануляването го направи да става като последен ред код на първия цикъл;

2. Като направиш values[j] = parseFloat(values[j]); - ако числото е било 36,10, вече става 36,1 и съответно гърми. Направи го директно: sum = sum + parseFloat(values[j]; без да променяш оригиналните стойности.

Като направиш №1 и №2 и вече известното -Infinity ще имаш 100 точки wink

1
a.polyanska avatar a.polyanska 107 Точки

Вярно, че имам 100 точки :) За сумата схванах къде е грешката, но честно казано по т.2- с парсването- не разбрах концепцията. Нали 36.10 и 36.1 е едно и също, защо това се отразява на аритметичната операция? Можеш ли да ми обясниш по-подробно?

0
a.angelov avatar a.angelov 1332 Точки

На аритметичната операция не се отразява, но в условието е казано да се принтне числото в същия вид както е подадено във входа - т.е. 36.10 трябва да се приртне като 36.10, а не като 36.1. Тоест проблема е само в output-а.

Това е smile

0
VNikolov avatar VNikolov 51 Точки

Здравей, проблема ти идва от там, че зануляваш междинната сума, само когато е по-голяма от най-голямата за момента. Другото което ти гърми на тестовете е това, че в условието е казано да не се форматират числата при изкарване на конзолата, а ти с функцията parseFloat() ги форматираш. Пази ги като низове, а само при пресмятане на сумата ги парсвай.

1
21/11/2014 11:17:15
a.polyanska avatar a.polyanska 107 Точки

Да, за междинната сума не бях съобразила, но всъщност първоначално парсвах при пресмятане на сумата- както ти казваш- и пак гърмеше по същия начин.

0
VNikolov avatar VNikolov 51 Точки

До колкото видях, проблема идва от Number.MIN_VALUE, по незнайни причини не смята, че -300 е по-голямо от MIN_VALUE. Аз лично го направих с -Infinity и работи.

1
a.angelov avatar a.angelov 1332 Точки

Причините са знайни:

The Number.MIN_VALUE property represents the smallest positive numeric value representable in JavaScript.

wink

2