小编Per*_*röm的帖子

正确的总和与总和,抵消舍入误差

用PHP编写的带有MySQL数据库的Web应用程序.

我有一个系统,可以在分摊成本时为许多人计算不同的成本.例如,人员A购买的东西为10,而人员B,C和D应该分摊成本.

因此,该系统应该记录A人10 的正记录和B,C和D的10/3的负记录.

但是,当这样做时; 四舍五入后B,C和D均为-3.33.这当然并不加起来总数的10什么的要对这个问题的最好方法是什么?一个最优的解决方案是随机化一个人获得的稍微大一点的成本.

一个可能的解决方案是,如果我只是让最后一个人的债务10 - (A + B),但是如果四个人分摊成本例如13.34 则存在问题.那么不同的部分将是3.34,3.34,3.34和3.32,而最佳分割将是3.34,3.34,3.33,3.33.

有些人可能会争辩说,只要有足够的小数,这只是在拥有大量行时的问题.但在一个经济的系统中,我认为从一开始就拥有一个故障安全系统是很重要的.它需要是可扩展的,甚至不会有任何误差.不公平是好的,只是没有错误.

类似的问题:总和分值问题(处理舍入误差)

php rounding-error divide

8
推荐指数
1
解决办法
663
查看次数

使用 Cypress 等待 XHR 轮询中的特定响应

我有一个 cypress 规范,我想用它来测试我网站上的一个函数,该函数轮询第三方 API,直到它收到正确的答案,然后显示更多信息供用户继续使用该函数。

我开始我的规范

cy.server();
cy.route('GET', '**/that-other-api/**').as('otherApi');
Run Code Online (Sandbox Code Playgroud)

我知道这部分有效。该路由列在 Cypress 测试 GUI 的顶部,我的otherApi别名是在运行时在命令列表中列出的 XHR 请求中附加的。

当用户(或我的测试)单击按钮时,站点将开始轮询该端点。当我status: success在响应中收到 a时,用户(或我的测试)将获得一个完整的选项下拉列表,并且可以继续。

我怎样才能让赛普拉斯等到我从 XHR 请求中得到特定响应(或达到赛普拉斯超时),然后继续前进?

网络请求的文档没有解释,如果这是可以或不可以。我试过了

cy.wait('@billectaAccounts').should('have.property', 'response.body.status', 'success');
Run Code Online (Sandbox Code Playgroud)

只是为了看看东西是否有效

cy.wait('@billectaAccounts').should('have.property', 'status', 201);
Run Code Online (Sandbox Code Playgroud)

两者都抛出错误:

InvalidStateError:无法从“XMLHttpRequest”读取“responseText”属性:只有当对象的“responseType”为“”或“text”(为“json”)时,才能访问该值。

记录响应

cy.wait('@billectaAccounts').then(console.log);
Run Code Online (Sandbox Code Playgroud)

记录响应并显示我的状态变量在那里,但pending因为它仅在第一个请求中。

{
  "xhr": {
    "method": "GET",
    "url": "https://myapi/longToken",
    "id": "xhr193"
  },
  "id": "xhr193",
  "url": "https://myapi/longToken",
  "method": "GET",
  "status": 200,
  "statusMessage": "200 (OK)",
  "request": {
    "headers": {
      "Accept": "application/json, text/plain, */*"
    },
    "body": null
  },
  "response": {
    "headers": {
      "cache-control": …
Run Code Online (Sandbox Code Playgroud)

javascript xmlhttprequest cypress

6
推荐指数
0
解决办法
958
查看次数

运行 Jest 时 NextJS 中未定义环境变量

我设置了一个简单的 NextJS 项目,但在让 Jest 识别我的环境变量时遇到问题。我已尽我所能按照https://nextjs.org/docs/basic-features/environment-variables#test-environment-variables上的说明进行操作,但无法使其正常工作。

这是我的问题的简化版本。

// .env.test.local
MY_ENVIRONMENT_VARIABLE=my_value
Run Code Online (Sandbox Code Playgroud)
// .env.test.local
MY_ENVIRONMENT_VARIABLE=my_value
Run Code Online (Sandbox Code Playgroud)
// My function I want to test
export const getEnvironment = () => {
  const MY_ENVIRONMENT_VARIABLE = process.env.MY_ENVIRONMENT_VARIABLE;
  return MY_ENVIRONMENT_VARIABLE;
};
Run Code Online (Sandbox Code Playgroud)

我在开玩笑jest --watch。我可以看到它得到了 environment test,但没有出现我自己指定的变量。

上面的测试失败了

Expected: "my_value"
Received: undefined
Run Code Online (Sandbox Code Playgroud)

如果有任何其他文件相关,请发表评论,我会添加我所拥有的。

environment-variables jestjs next.js

2
推荐指数
2
解决办法
2318
查看次数