У меня есть форма для моих клиентов, чтобы добавить бюджетные прогнозы. Известный пользователь хочет иметь возможность показывать долларовые ценности в долларах, долларах Kila или Mega-долларах.Проблема с JavaScript-арифметикой
Я пытаюсь достичь этого с помощью группы переключателей, которые вызывают следующую функцию JavaScript, но у меня проблемы с округлением, что делает результаты выглядят довольно краткими.
Любой совет будет очень благодарен!
Линн
function setDollars(new_mode)
{
var factor;
var myfield;
var myval;
var cur_mode = document.proj_form.cur_dollars.value;
if(cur_mode == new_mode)
{
return;
}
else if((cur_mode == 'd')&&(new_mode == 'kd'))
{
factor = "0.001";
}
else if((cur_mode == 'd')&&(new_mode == 'md'))
{
factor = "0.000001";
}
else if((cur_mode == 'kd')&&(new_mode == 'd'))
{
factor = "1000";
}
else if((cur_mode == 'kd')&&(new_mode == 'md'))
{
factor = "0.001";
}
else if((cur_mode == 'md')&&(new_mode == 'kd'))
{
factor = "1000";
}
else if((cur_mode == 'md')&&(new_mode == 'd'))
{
factor = "1000000";
}
document.proj_form.cur_dollars.value = new_mode;
var cur_idx = document.proj_form.cur_idx.value;
var available_slots = 13 - cur_idx;
var td_name;
var cell;
var new_value;
//Adjust dollar values for projections
for(i=1;i<13;i++)
{
var myfield = eval('document.proj_form.proj_'+i);
if(myfield.value == '')
{
myfield.value = 0;
}
var myval = parseFloat(myfield.value) * parseFloat(factor);
myfield.value = myval;
if(i < cur_idx)
{
document.getElementById("actual_"+i).innerHTML = myval;
}
}
Эмм, в чем проблема? –
@BlueRaja: Я могу сказать, что вы не использовали поплавки javascript. Совсем редко бывает 2.10 + 5.15 = 7.24999999999999999999999999999999999999999. Довольно унизительно. Я когда-то сделал сайт, который продал объявление, которое обвинялось в этом слове, и как-то .10 центов раз 200 слов равнялись бы 19.999999999999999999 долларов. – Satanicpuppy
Возможно, округление FP. .000001 не совсем .000001, и иногда вы получите результаты, такие как 450.2500001, где вы хотели 450.25. – cHao