为啥js计算999999*99.99会计算错呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥js计算999999*99.99会计算错呢相关的知识,希望对你有一定的参考价值。

为什么计算的值为99999899990000,并没有用toFixed函数,这个误差怎么来的,其他数据即使计算的值不是正确的,但在保留几位有效数字后起码显示的还是正确的值,求解释

参考技术A 十进制数字 0.5,用二进制表示为 0.1
可以理解为 0*2^0+1*(2^-1) = 0.5

十进制数字 0.25,用二进制表示为 0.01
可以理解为 0*2^0+0*(2^-1)+1*(2^-2) = 0.25

十进制数字 0.75,用二进制表示为 0.11
可以理解为 0*2^0+1*(2^-1)+1*(2^-2) = 0.75

好了,问题来了 怎么表示一个 介于 0.25~0.5 之间的数?
除不尽吧?无理数吧?对了,这就是浮点数不是刚刚好等于一个十进制浮点数的原因追问

讲的很好关键是现在不是99999899990000.00999.........几,这不科学还是没解决问题

追答

num = Math.round(num*100)/100;

做一下舍入,保留两位小数

追问

大哥是我表达有问题还是你回答错模块了,请看清楚在回答可以么?或者麻烦自己写个程序输出一下看看值再说好么?不要老是拿理论哪有套,有事实并非如此,可以实践后再说么?

追答

呵呵

参考技术B 计算结果为99989900.00999999追问

并不是你说的值如果是的话保留两位小数就对了,关键现在不是,你可以自己写程序弹出看看再说啊

追答

追问

我去输错了是999999*999999999.99保留两位小数他就会丢失0.01结果是999998999990000.00为什么999998999990000.01没道理

为啥从计算切换到方法时,以下 Vue.js 代码不起作用?

【中文标题】为啥从计算切换到方法时,以下 Vue.js 代码不起作用?【英文标题】:Why does the following Vue.js code not work when switching from computed to methods?为什么从计算切换到方法时,以下 Vue.js 代码不起作用? 【发布时间】:2019-03-29 15:13:39 【问题描述】:

在以下代码中:

https://jsfiddle.net/willywg/2g7m5qy5/

根据复选框的状态禁用按钮。

但是当我改变时:

  computed: 
    isDisabled: function()
        return !this.terms;
    
  

  methods: 
    isDisabled: function()
        return !this.terms;
    
  

启用/禁用不再起作用。

这是为什么?

根据文档:

https://vuejs.org/v2/guide/computed.html

在这个例子中两者的工作方式不应该相同吗?

【问题讨论】:

因为计算是反应性的,方法不是。如果在这种情况下使用方法,则每次检查/取消检查输入时都需要调用该方法。 【参考方案1】:

计算属性会查找更改,但需要使用 @change 或 @click 之类的方式调用方法。在这种情况下,您实际上可以只绑定您的数据对象而无需任何一个。

<div id="app">
  <p>
    <label for='terms'>
      <input id='terms' type='checkbox' v-model='terms' /> I accept terms!!!
    </label>
  </p>
  <button :disabled='!terms'>Send Form</button>
</div>

new Vue(
  el: '#app',
  data: 
    terms: false
  
)

【讨论】:

【参考方案2】:

计算和方法是两个不同的东西

方法:当你想做某事时调用,比如调用一个动作/突变或做一些除了处理存储/状态之外的事情

computed:你可以使用返回值来绑定模板html中的东西,一些变化的值会根据一些计算而变化。如果它不会改变,那么只需将其绑定到日期/状态

在您当前的脚本中计算定位 isDisabled 数据一直在变化。 因此,每当您的数据更改其功能时,都会自动触发。

但是,如果您希望在方法中使用此功能,则应手动触发该功能。 示例:

<input id='terms' type='checkbox' v-model='terms' @change="isDisabled" /> I accept terms!!!

当它发生变化时,它会调用 isDisabled 方法。

更多详情Methods vs Computed。谢谢

【讨论】:

以上是关于为啥js计算999999*99.99会计算错呢的主要内容,如果未能解决你的问题,请参考以下文章

为啥oracle ebs中发票要创建会计科目

会计基础

会计如何被软件代替

学会计用macbook好吗?

SAP固定资产无收入报废(ABAVN),为啥产生的会计凭证没有将固定资产清理转入营业外支出?

会计电算化:电子表格软件概述