JavaScript работает локально, но не онлайн, и округляется до целых чисел, а не десятичных дробей. [Сформулировать сюжетную линию]

Я создал фрагмент JavaScript для запуска в модуле eLearning, который я создал с помощью Articulate Storyline 2 (программное обеспечение для быстрой разработки eLearning). Код предназначен для работы в качестве калькулятора, который выводит информацию о том, сколько будет стоить компании вводный инструктаж для новых сотрудников.

Пользователь вводит числа в модуль проигрывателя / электронного обучения Storyline в своем браузере. Код извлекает эти входные данные и сохраняет их в переменных. Эта информация используется для выполнения расчетов, и пользователь получает результат на последнем экране в браузере.

Как ни странно, JavaScript запускается без проблем локально, но когда он загружен на наш сервер, результат всегда возвращается как ноль. Я не уверен, почему это происходит.

Кроме того, числа всегда являются целыми числами. Они никогда не возвращаются как что-то вроде £13,553,99. Обычно оно округляется до ближайшего целого числа, например £13,554.00.

Если бы кто-нибудь мог дать мне несколько советов, я был бы очень благодарен. Я включил код и комментарии, чтобы вы могли видеть, что я сделал. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

// Retrieve variables from Storyline file.
var player=GetPlayer();

// Assign Storyline variables to JS variables. Each letter represents a data entry box in the elearning module.
var aa = player.GetVar("a");
var bb = player.GetVar("b"); 
var cc = player.GetVar("c");  
var dd = player.GetVar("d"); 
var ee = player.GetVar("e");
var ff = player.GetVar("f"); 
var gg = player.GetVar("g");  
var hh = player.GetVar("h"); 
var ii = player.GetVar("i");
var jj = player.GetVar("j"); 
var ll = player.GetVar("l");  
var qq = player.GetVar("q");  

// Convert strings to integers
var aa = parseInt(aa);
var bb = parseInt(bb);
var cc = parseInt(cc);
var dd = parseInt(dd);
var ee = parseInt(ee);
var ff = parseInt(ff);
var gg = parseInt(gg);
var hh = parseInt(hh);
var ii = parseInt(ii);
var jj = parseInt(jj);
var ll = parseInt(ll);
var qq = parseInt(qq);

// Add comma to thousands.
function addCommas(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}

// Use the numbers stored in the variables to do the induction calculations.
// # per month
var mm = aa * 12;

// £ new recruit/hr + £ trainer/hr
var ss = bb + cc; 

// Duration mins
var nn = dd / 60;

// (Room booking admin mins + admin records) / 60 * £ admin/hr
var oo = (ee + gg) / 60 * ff;

// Repeating hrs/month
var pp = jj * (bb + cc);

// # of trainers
var rr = (ll * qq) * (cc + cc); 

//Results calculations
var tt = (ss * nn) + oo; 

var uu = tt + hh + ii;

var vv = uu * mm;

var ww = pp * 12;

// Calculate final result, round to 2 decimal places and convert number to a string. Add comma to define thousands.
var total = vv + ww + rr;
var totalRnd = total.toFixed(2);
var totalStr = totalRnd.toString();
var totalCost = addCommas(totalStr);

// Sends result back to Storyline.
player.SetVar("result",totalCost);

ОБНОВЛЕНИЕ: я использую parseInt() вместо parseFloat(), который объясняет проблему целых чисел.

1 ответ

Решение

parseInt анализирует входные данные для целочисленного значения. Вам нужно использовать parseFloat вместо. Тем не менее, странно, что это сработало локально для вас. Я думаю, что у вас там целочисленные значения, так parseInt не испортил точность.

Другие вопросы по тегам