Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript算法的问题_Javascript - Fatal编程技术网

JavaScript算法的问题

JavaScript算法的问题,javascript,Javascript,我有一个表格供我的客户添加预算预测。著名用户希望能够以美元、基拉美元或百万美元显示美元价值 我试图通过一组调用以下JavaScript函数的单选按钮来实现这一点,但在舍入方面遇到了问题,这使得结果看起来很糟糕 任何建议都将不胜感激 林恩 函数设置(新模式) { var因子; var myfield; var myval; var cur_mode=document.proj_form.cur_.value; 如果(当前模式==新模式) { 回来 } else if((当前模式='d')&&(新模

我有一个表格供我的客户添加预算预测。著名用户希望能够以美元、基拉美元或百万美元显示美元价值

我试图通过一组调用以下JavaScript函数的单选按钮来实现这一点,但在舍入方面遇到了问题,这使得结果看起来很糟糕

任何建议都将不胜感激

林恩

函数设置(新模式)
{
var因子;
var myfield;
var myval;
var cur_mode=document.proj_form.cur_.value;
如果(当前模式==新模式)
{
回来
}
else if((当前模式='d')&&(新模式='kd'))
{
系数=“0.001”;
}
else if((当前模式='d')&&(新模式='md'))
{
系数=“0.000001”;
}
else if((当前模式=='kd')&&(新模式=='d'))
{
系数=“1000”;
}
else if((当前模式='kd')&&(新模式='md'))
{
系数=“0.001”;
}
else if((当前模式='md')&&(新模式='kd'))
{
系数=“1000”;
}
else if((当前模式='md')&&(新模式='d'))
{
系数=“1000000”;
}
document.proj_form.cur_$s.value=新模式;
var cur_idx=document.proj_form.cur_idx.value;
var可用时隙=13-电流idx;
变量td_名称;
var细胞;
var新值;
//调整预测的美元价值

对于(i=1;iJavascript的浮点数是一个持续的刺激源

您应该尝试添加toFixed()以减少不可避免的荒谬小数,实际上,我不得不强迫它这样做,在我不关心的地方,通过执行以下操作进行取整:

   number_to_be_rounded = Math.round(number_to_be_rounded*1000)/1000;
   number_to_be_rounded = parseFloat(number_to_be_rounded.toFixed(2));

这很难看,但对于一个非金融系统来说已经足够近了。

Javascript的浮点数一直是一个令人恼火的来源

您应该尝试添加toFixed()以减少不可避免的荒谬小数,实际上,我不得不强迫它这样做,在我不关心的地方,通过执行以下操作进行取整:

   number_to_be_rounded = Math.round(number_to_be_rounded*1000)/1000;
   number_to_be_rounded = parseFloat(number_to_be_rounded.toFixed(2));

这很难看,但对于非金融系统来说已经足够近了。

首先,在做了数学运算后,不要设置
myfield.value=myval
。每选择一个单选按钮,就会累积舍入误差。始终保持myfield.value为美元,然后计算一个显示值。这将导致lso减少if-else级联中的案例数量,因为您将始终从美元转换

现在用除法计算——你永远不需要乘以0.001或1000,因为你总是在同一个方向上转换

使用Math.round()控制舍入误差。您可以先将原始值相乘,然后再除以更大的因子,这样也有助于控制舍入误差;例如,在纯数学中,这两者是相同的:

newvalue = value / 1000;
newvalue = (value * 10) / 10000;

增加


另外,不要指定一组数字
除数=“1000”
使用实际数字
除数=1000
(不带引号)

首先,在进行数学运算后,不要设置
myfield.value=myval
。每次额外选择一个单选按钮,都会累积舍入误差。始终将myfield.value保留为美元,然后计算显示值。这也会减少if-else级联中的案例数,因为您需要这样做将始终从美元转换

现在用除法计算——你永远不需要乘以0.001或1000,因为你总是在同一个方向上转换

使用Math.round()控制舍入误差。您可以先将原始值相乘,然后再除以更大的因子,这样也有助于控制舍入误差;例如,在纯数学中,这两者是相同的:

newvalue = value / 1000;
newvalue = (value * 10) / 10000;

增加


另外,不要指定一组数字
除数=“1000”
使用实际数字
除数=1000
(不带引号)

Erm,有什么问题吗?@BlueRaja:我可以告诉你你没有使用javascript浮动。2.10+5.15=7.24999999999999999999999999999999999999999是很常见的。很丢脸。我曾经做过一个网站,卖一个按单词收费的广告,不知怎的。10美分乘以200个单词等于19.99999999999999999999美元。可能是FP轮ing..000001并不完全是.000001,有时你会得到450.2500001这样的结果,而你想要的结果是450.25。有两件事你应该避免:对货币值使用浮动和来回转换值。以美元(或美分,如果合适)存储实际值作为整数,仅格式化这些值以供显示。如果这些表单字段应以所选格式进行编辑,则必须将实际值以美元形式存储在其他位置,如javascript中的结构或html中的隐藏输入。此外,请不要使用
eval
var myfield=document.proj_form['proj'+i]
应该可以正常工作。呃,有什么问题吗?@BlueRaja:我可以告诉你你没有使用javascript浮动。2.10+5.15=7.24999999999999999999999999999999999是很常见的。很丢脸。我曾经做过一个网站,卖一个按单词收费的广告,不知怎的。10美分乘以200个单词等于19.9999999999999999999999美元。可能FP舍入..000001不完全是.000001,有时你会得到450.2500001这样的结果,而你想要的是450.25。有两件事你应该避免:对货币值使用浮动和来回转换值。以美元(或美分,如果合适)存储实际值作为整数,仅格式化这些值以供显示。如果这些表单字段应以所选格式进行编辑,则必须将实际值以美元形式存储在其他位置,如javascript中的结构或html中的隐藏输入。此外,请不要使用
eval
var myfield=document.proj_form['proj'+i]
应该可以正常工作。谢谢!这太有帮助了!谢谢!这太有帮助了!谢谢斯蒂芬。这非常有帮助!谢谢斯蒂芬。这非常有帮助!