zoukankan      html  css  js  c++  java
  • JavaScript浮点运算,小数点精度


    math.js
    JavaScript浮点运算,小数点精度

    
    // JavaScript Document
    //数学函数
    // 浮点数加法运算
    function floatAdd(arg1, arg2) {
    	var r1, r2, m;
    	try{
    		r1 = arg1.toString().split(".")[1].length;
    	} catch(e) {
    		r1 = 0;
    	}
    	try {
    		r2 = arg2.toString().split(".")[1].length;
    	} catch(e) {
    		r2 = 0;
    	}
    	m = Math.pow(10, Math.max(r1, r2));
    	return (arg1 * m + arg2 * m) / m;
    }
    
    // 浮点数减法运算
    function floatSub(arg1, arg2) {
    	var r1, r2, m, n;
    	try {
    		r1 = arg1.toString().split(".")[1].length;
    	} catch(e) {
    		r1 = 0
    	}
    	try {
    		r2 = arg2.toString().split(".")[1].length;
    	} catch(e) {
    		r2 = 0
    	}
    	m = Math.pow(10, Math.max(r1, r2));
    	n = (r1 >= r2) ? r1 : r2;
    	return ((arg1 * m - arg2 * m) / m).toFixed(n);
    }
    
    // 浮点数乘法运算
    function floatMul(arg1, arg2) {    
    	var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    	try {
    		m += s1.split(".")[1].length;
    	} catch(e) {}
    	try {
    		m += s2.split(".")[1].length;
    	} catch(e) {}
    	return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
    }
    
    // 浮点数除法运算
    function floatDiv(arg1, arg2) {
    	var t1 = 0, t2 = 0, r1, r2;    
    	try {
    		t1 = arg1.toString().split(".")[1].length;
    	} catch(e) {}
    	try {
    		t2 = arg2.toString().split(".")[1].length;
    	} catch(e) {}
    	with(Math) {
    		r1 = Number(arg1.toString().replace(".", ""));
    		r2 = Number(arg2.toString().replace(".", ""));
    		return (r1 / r2) * pow(10, t2 - t1);
    	}
    }
    // 设置数值精度
    function setScale(value, scale, roundingMode) {
    	if (roundingMode.toLowerCase() == "roundhalfup") {
    		return (Math.round(value * Math.pow(10, scale)) / Math.pow(10, scale)).toFixed(scale);
    	} else if (roundingMode.toLowerCase() == "roundup") {
    		return (Math.ceil(value * Math.pow(10, scale)) / Math.pow(10, scale)).toFixed(scale);
    	} else {
    		return (Math.floor(value * Math.pow(10, scale)) / Math.pow(10, scale)).toFixed(scale);
    	}
    }	
    	
    
    
  • 相关阅读:
    POJ 3026
    POJ 1258
    POJ 1751
    一种用于三维物体建模的精确、鲁棒的距离图像配准算法
    人脸识别技术介绍和表情识别最新研究
    汇总|实时性语义分割算法(共24篇)
    ECCV2020最佳论文解读之递归全对场变换(RAFT)光流计算模型
    三维重建的定位定姿算法
    多视图几何三维重建实战系列- Cascade-MVSNet
    HybridPose:混合表示下的6D对象姿态估计
  • 原文地址:https://www.cnblogs.com/qixidi/p/10287653.html
Copyright © 2011-2022 走看看