Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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还是作为AJAX调用进行资金计算?_Javascript_Jquery_Ajax_Currency - Fatal编程技术网

我应该用Javascript还是作为AJAX调用进行资金计算?

我应该用Javascript还是作为AJAX调用进行资金计算?,javascript,jquery,ajax,currency,Javascript,Jquery,Ajax,Currency,我正在使用JQuery、Stripes、Spring和JPA(Hibernate)构建一个webapp 我有一个允许用户输入大量订单行项目的页面,每次价格字段中出现onblur时,我都会将一个JQuery事件绑定到该字段,该字段将所有价格字段相加(这是一个小计),计算10%的税费并将税费添加到小计中。我更新页面以显示小计、税金和总计 我的问题是,我应该用Javascript进行计算吗?如果是,我如何确保舍入etc工作正常?我有点担心精确度的问题 对我来说,用Java调用Ajax进行计算是否更好

我正在使用JQuery、Stripes、Spring和JPA(Hibernate)构建一个webapp

我有一个允许用户输入大量订单行项目的页面,每次价格字段中出现onblur时,我都会将一个JQuery事件绑定到该字段,该字段将所有价格字段相加(这是一个小计),计算10%的税费并将税费添加到小计中。我更新页面以显示小计、税金和总计

我的问题是,我应该用Javascript进行计算吗?如果是,我如何确保舍入etc工作正常?我有点担心精确度的问题

对我来说,用Java调用Ajax进行计算是否更好


任何建议都很好

Javascript不是最好的数学语言。您将在Javascript中找到一些为true但返回false的数学表达式。我记不清了,但我做过一次计算器就知道了

您可以在这里找到Javascript的好的和坏的部分:

您应该在客户端执行此操作(我假设您已经准备好客户端验证器),以便用户可以查看总数(如果我们向服务器打往返电话只是为了查看总数,我会很讨厌)在服务器端也可以这样做。从POST读取值不是一个好主意,因为如果您从HTTP POST获取这些值,使用HTTPProxy的人可能会更改这些值

一个篡改HTTP GET和POST的工具,以及一个可以在其中玩的工具


编辑:是的,您可以通过AJAX调用在服务器上进行计算,但是您需要验证总数(根据产品数量+税)。当用户提交订单时,根据经验法则,您需要衡量什么对您的应用程序重要。如果它是绝对精确的,那么就作为AJAX调用来执行,因为浏览器、计算机和操作系统之间可能存在舍入差异

当我为一家公司开发一个网站时,我也遇到了同样的问题,但是我们通过使用一种巧妙的方法来使用javascript部分,只使用整数算术

因为我们处理的是两位数的货币,所以我们将所有值乘以10000,然后进行计算。四舍五入到整数,再除以10000,将结果截断到小数点后两位


这使得浏览器和服务器端之间的往返过程和谐一致。

如果您接受订单,我建议您在确认订单之前始终在服务器端进行计算,以避免有人恶意篡改从客户端发送的数据。 这就是说,您可以使用JavaScript进行动态更新,并在准确性方面添加一些措辞恰当的免责声明,然后在用户确认订单之前向用户展示您的服务器端计算。

根据,JavaScript使用IEEE-754,因此在进行浮点运算时,其精度为15-16位。如果您在Javascript中使用与服务器端相同的舍入方式,那么这对于货币操作应该足够了


但是,如果您需要绝对确保它在任何和所有浏览器上都是正确的,那么Ajax调用将是最安全的操作过程。

您应该使用后端(在您的情况下是Java)来进行严格的计算,因为无法保证数据不会被最终用户篡改以使其受益。一旦你向他们发送了一份被篡改价格的确认书,你就基本上受到了购买合同条款的约束,即使你知道他们篡改了总价。没有简单的方法可以证明他们篡改了您的代码或计算,而这反过来又会让您不知所措。使用后端,您已经完全控制了该环境,任何错误或错误都可以直接归咎于您。

即使这不是一个很好的问题(我想交换是更好的地方),除非有真正的要求,否则我不会在算术计算中使用它。如果涉及小数点,警报器会发出警报

例如,您是否知道:

0.1 + 0.2 = 0.30000000000000004 
因此,如果您实际检查为
0.1+0.2==0.3
,则它将为
false

或者这里是更好的:

  • typeof NaN
    是数字
    NaN!=NaN
    。但是
    NaN!==NaN
    同样
    true
下面是我最喜欢的:

var i = 1;
i = i + ""; 
i + 1 //output will be "11" :) 
console.log(i);//output will be 1 
i - 1 = 0; // this part is the golden shot 
尽管我不完全同意以下文章,但我绝对建议阅读:


它有很多优点。

+1来自我保罗。我不知道JS在算术计算RAM方面有精度问题,ECMAScript使用快速但不精确的浮点计算。例如,
.1+.2=0.300000000004
。即使是ECMAScript 5也会有这些问题,因为建议的精度系统对于标准来说问题太大(速度非常慢,可能会破坏现有的应用程序)。再过几年,一个精确的系统就要标准化了,更不用说可用了。就要给出同样的建议了!我记得有一篇文章叫“为什么计算机在数学方面很差劲?”()JavaScript并没有什么特别之处。任何使用IEEE 754浮点数(几乎所有)的语言都有同样的问题。但是你知道吗,这些前10个“错误”的东西实际上使javascript变得动态,并且适合开发phython中的动态类型?@vibs2006:dynamic并不意味着不一致。。。无论如何,我不会争辩,这是一篇很好读的文章,即使我不是100%同意。。这说明你必须知道你在用javascript做什么。。喜欢对它的深刻理解。哦,顺便说一句,我很想了解0.2+0.10.3使其“更具活力”和“更适合”