专栏首页LeoXu的博客JavaScript : 两个数的精确乘法

JavaScript : 两个数的精确乘法

工作中要处理两个数的乘法,网上搜索了没有找到满意的答案,然后根据网上提供的思路自己实现了一个,重点满足容错的要求,就是不会轻易报错。

主要算法是记录小数点后位数的总长度,然后将两个数转变成整数后相乘,再根据小数点后位数的总长度将乘积转变成小数。

代码如下:

/**
 * 两个数的精确乘法
 * @param v1
 * @param v2
 *
 * 对于不能处理的问题,此方法一律返回 0
 *
 * @returns {number}
 */
function numberMultiplication (v1, v2) {
  if (isNaN(v1) || isNaN(v2)) {
    return 0
  }
  var isNegative = false;
  if ((v1 < 0 && v2 >= 0) || (v1 >=0 && v2 < 0)) {
    isNegative = true;
  }
  var f1 = '' + Math.abs(v1),
      f2 = '' + Math.abs(v2);
  var arr1 = f1.split('.'),
      arr2 = f2.split('.');
  var f11 = arr1[0],
      f12 = 0,
      f21 = arr2[0],
      f22 = 0,
      len1 = 0,
      len2 = 0;
  if (arr1.length >= 2) {
    f12 = arr1[1];
    len1 = f12.length;
  }
  if (arr2.length >= 2) {
    f22 = arr2[1];
    len2 = f22.length;
  }
  var x1 = 0,
      x2 = 0;
  if (f11 > 0) {
    x1 = f1.replace('.', '');
  } else {
    x1 = f12;
  }
  if (f21 > 0) {
    x2 = f2.replace('.', '');
  } else {
    x2 = f22;
  }
  var ret = x1 * x2 / Math.pow(10, len1 + len2);
  if (isNegative) {
    return -ret;
  } else {
    return ret;
  }
}

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ListView绑定点击事件 原

    LeoXu
  • 在ListView上使用自定义的Adapter

    需要实现的东西是: 一个DataListViewAdapter,当进行如下调用时,就能在列表上显示出数据:

    LeoXu
  • 装饰器模式(Decorator Pattern)概要

    关于装饰器模式,Header First中用一个咖啡店的示例进行了精彩的描述。

    LeoXu
  • 小程序开发总结

    很久很久很久没有更新了,最近几个月因为房子交房,生活上是一片忙碌,工作上的事其实还好,没有分去很多精力,主要是在生活上的事情牵扯了太多了精力,于是乎把每周一更博...

    Originalee
  • Spring 多线程下注入bean问题

    java404
  • [源码解析]Oozie来龙去脉之提交任务

    Oozie是由Cloudera公司贡献给Apache的基于工作流引擎的开源框架,是Hadoop平台的开源的工作流调度引擎,用来管理Hadoop作业。本文是系列的...

    罗西的思考
  • 小程序 · 一周报

    “ 为优化用户的分享体验,小程序、网页及App分享功能将进行调整。同时,小程序新增了打开其他小程序、打开小程序设置页等组件。”

    极乐君
  • Python程序结构

    4种流程控制语句结构: if if -- else if -- elif --else if多条件

    潇洒坤
  • 写给新手前端的各种文件上传攻略,从小图片到大文件断点续传

    今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受。这么好的光阴怎么浪费,睡觉、吃饭、打豆豆这怎么可能(耍多了也烦),完全不符合我们程序...

    coder_koala
  • hdu1044

    @坤的

扫码关注云+社区

领取腾讯云代金券