Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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 淘汰JS电子表格计算_Javascript_Jquery_Excel_Knockout.js - Fatal编程技术网

Javascript 淘汰JS电子表格计算

Javascript 淘汰JS电子表格计算,javascript,jquery,excel,knockout.js,Javascript,Jquery,Excel,Knockout.js,我正在制作一个HTML电子表格,使用Knockout.js进行数据绑定。我决定使用一个简单的、尽管不优雅的解决方案,它可以让我更好地查看和控制每个绑定上发生的事情,但即使如此,我还是遇到了两个障碍:百分比和在结果计算中放置逗号 以下是JSFIDLE: 我设法在总数中使用:.replace(/\B(?=(\d{3})+(?!\d))/g,“,”,但当我将它添加到两个项目(viewModel.C11和viewModel.D11)中时,它打破了表格,给出了总数 至于百分比,我试着做以下几点:(C11-

我正在制作一个HTML电子表格,使用Knockout.js进行数据绑定。我决定使用一个简单的、尽管不优雅的解决方案,它可以让我更好地查看和控制每个绑定上发生的事情,但即使如此,我还是遇到了两个障碍:百分比和在结果计算中放置逗号

以下是JSFIDLE:

我设法在总数中使用:
.replace(/\B(?=(\d{3})+(?!\d))/g,“,”
,但当我将它添加到两个项目(viewModel.C11和viewModel.D11)中时,它打破了表格,给出了总数

至于百分比,我试着做以下几点:(C11-D11)/C11,这对显示折扣很有用

有人知道如何解决这两个问题吗

以下是淘汰码:

  var viewModel = {
  C1: ko.observable(24.37),
  C2: ko.observable(1.5),
  C3: ko.observable(""),
  C4: ko.observable("4"),
  C5: ko.observable("4"),
  C6: ko.observable("8"),
  C8: ko.observable(""),
  C9: ko.observable(""),
  C10: ko.observable(""),
  C11: ko.observable(""),
  C12: ko.observable(""),
  D1: ko.observable(38.62),
  D2: ko.observable(1.5),
  D3: ko.observable(""),
  D4: ko.observable("9"),
  D5: ko.observable("4"),
  D6: ko.observable("8"),
  D8: ko.observable(""),
  D9: ko.observable(""),
  D10: ko.observable(""),
  D11: ko.observable(""),
  D12: ko.observable(""),
  D13: ko.observable("")

};

viewModel.C3 = ko.computed(function () {
   return (this.C1() * this.C2()).toFixed(2);
}, viewModel);

viewModel.D3 = ko.computed(function () {
   return (this.D1() * this.D2()).toFixed(2);
}, viewModel);

viewModel.C8 = ko.computed(function () {
   return (this.C3() / this.C4()).toFixed(2);
}, viewModel);

viewModel.D8 = ko.computed(function () {
   return (this.D3() / this.D4()).toFixed(2);
}, viewModel);

viewModel.C9 = ko.computed(function () {
   return (this.C8() * this.C5()).toFixed(2);
}, viewModel);

viewModel.D9 = ko.computed(function () {
   return (this.D8() * this.D5()).toFixed(2);
}, viewModel);

viewModel.C10 = ko.computed(function () {
   return (this.C9() * this.C6()).toFixed(2);
}, viewModel);

viewModel.D10 = ko.computed(function () {
   return (this.D9() * this.D6()).toFixed(2);
}, viewModel);

viewModel.C11 = ko.computed(function () {
   return (this.C10() * 365).toFixed(2);
}, viewModel);

viewModel.D11 = ko.computed(function () {
   return (this.D10() * 365).toFixed(2);
}, viewModel);

//viewModel.C12 = ko.computed(function () {
//   return (this.C11() - this.D11()) / this.C11().toFixed(2);
//}, viewModel);

viewModel.D13 = ko.computed(function () {
   return (this.C11() - this.D11()).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}, viewModel);

ko.applyBindings(viewModel);
谢谢。

关于
(this.C11()-this.D11())/this.C11().toFixed(2)的问题
是指您正在对字符串调用
toFixed
。在另一组括号中围绕整个计算将解决此问题

((this.C11() - this.D11()) / this.C11()).toFixed(2);
通过格式化
C11
D11
来中断应用程序的原因是其他计算的可观察对象试图在其计算中使用格式化的返回值。由于
D13
没有依赖于它的其他可观察对象,因此它可以工作

您需要提供一种方法来区分计算值和渲染/格式化值。快速简便的方法是在模型上提供一个实用功能来执行格式化

viewModel.format = function(obs){
  return obs().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

Html:

返回((this.C11()-this.D11())/this.C11()*100).toFixed(2)工作正常。谢谢。
viewModel.format(obs){return obs().replace(/\B(?=(\d{3})+(?!\d))/g,“,”;}
在添加到JS文件时会引发错误。是否有一个步骤我遗漏了?修复了,不确定在我修改小提琴后从小提琴上剪切/粘贴时是如何搞糟的。太棒了!!非常感谢。我已经根据需要更新了JSFIDLE以供使用:查看相同的JSFIDLE:,viewModel.D13正在从C11中减去D11。如果我想添加这两个格式化的值(如D11+C11=D13),该怎么办?将-更改为+将中断计算器。有什么想法吗?