JSを書き直して小数点を保留します.

15519 ワード

なぜJavaScriptの最後に行く方法を書くのですか?ネット上には「JSは小数点以下を保留して後尾法に進みます.四捨五入法は足りないですか?」答:ネットで探したあのコードはしばらくの時間を経て、jsの浮動小数点の計算が不正確であることを発見しました.例えば、39.8を小数点2桁を保留して、意外にも39.79になりました.他の人が掘った穴に落ちないように、新人が穴に入らないように、JavaScriptの切り方を書き換えることにしました.不備なところがあれば、コメントエリアで指摘してください.
記事の目次
  • 去尾法
  • 進一法
  • 四捨五入法
  • .気が狂うほど伝わって久しい去尾法を批判する
  • .
  • 参照文献
  • びりょう法
    これは私のオリジナルの方法です.文字列を返します.不備があれば、コメントエリアで指摘してください.
    //   
    Number.prototype.toFloor = function (num) {
    	if (num < 0) {
    		return this;
    	}
    	let nnum = Number.parseFloat(this);
    	let str = nnum.toString();
    	let arr = str.split(".");
    	let strZ = arr[0];//arr[0]     ,arr[1]     
    	let strX = "";    //        
    	if (arr.length > 1) {//   
    		if (num > 0) {
    			if (arr[1].length >= num) {//   ,    
    				strX = arr[1].substr(0, num);
    			} else {//   ,    
    				let zeroArr = [];
    				for (let i = 0; i < num - arr[1].length; i++) {
    					zeroArr.push(0);
    				}
    				strX = arr[1].toString() + zeroArr.join("");
    			}
    			strX = "." + strX;
    		}
    	} else {//   
    		if (num > 0) {
    			let zeroArr = [];
    			for (let i = 0; i < num; i++) {
    				zeroArr.push(0);
    			}
    			strX = "." + zeroArr.join("");
    		}
    	}
    	let result = strZ + "" + strX;
    	return result;
    };
    
    進一法
    ネットワークをコピーします.足りないところがあれば、ご指摘ください.
    //   
    Number.prototype.toCeil = function (num) {
    	return Math.ceil(this * Math.pow(10, num)) / Math.pow(10, num);
    };
    
    四捨五入法
    私はtoFixed(num)が使いやすいと思います.注意:数字.toFiexed(小数位)は文字列を返します.
    toFixed
    1.235.toFixed(2) = 1.23
    1.2350001.toFixed(2) = 1.24
    
    ネットワークのコピー
    //     
    Number.prototype.toRound = function (num) {
    	return Math.round(this * Math.pow(10, num)) / Math.pow(10, num);
    };
    
    狂気じみたやり方を批判する
    //   
    Number.prototype.toFloor = function (num) {
    	return Math.floor(this * Math.pow(10, num)) / Math.pow(10, num);
    };
    
    //例を挙げると、39.8は2桁の小数を保持します.
    Math.floor(39.8 * Math.pow(10, 2)) / Math.pow(10, 2); //39.79
    Math.floor(38.8 * Math.pow(10, 2)) / Math.pow(10, 2); //38.79
    //39.80 * 100 = 3979.9999999999995
    
    参考文献
    [1]JSは小数点以下を保持し、法四捨五入法[DB|OL]を制定する.https://www.cnblogs.com/nbgzc/p/5261015.html