/** * Created by jimiz on 2017/3/28. */ var scMathUtil = { innerRoundTo: function(num, digit){ var lFactor = Math.pow(10, digit); var fOffSet = 0.5; var sign = ''; if (num < 0){ sign = '-'; num = Math.abs(num); } var result = Math.floor((num / lFactor) + fOffSet).toString(); var iLength = result.length; var r1 = result.substring(0, iLength + digit); var r2 = result.substring(iLength + digit, iLength); return Number(sign + r1 + '.' + r2); }, floatToBin: function(num) { return num.toString(2); }, binToFloat: function(bin) { var result = 0; var iLength = bin.length; var sign = ''; if (iLength > 0 && bin[0]==='-'){ sign = '-'; bin = bin.substring(1, iLength); } iLength = bin.length; var iDot = bin.indexOf('.'); if (iDot >= 0) { for (var i = 0; i < iLength; i++) { var num = Number(bin[i]); var idx = iDot - i; if (idx === 0) { continue }; if (idx > 0) { idx -= 1 }; var r = Math.pow(2, idx); result += num * r; } } else { result = parseInt(bin, 2); }; return sign + result; }, incMantissa: function(bin){ var result = bin; var iDot = bin.indexOf('.'); if (iDot < 0){return result}; var iLength = bin.length; for (var i = iLength - 1; i > iDot; i--){ var num = Number(bin[i]); if (num === 0){ num = 1; var bin1 = bin.substring(0, i); var bin2 = bin.substring(i + 1, iLength); result = bin1 + num.toString() + bin2; break; } }; return result; }, roundTo: function(num, digit){ var me = this; return me.innerRoundTo(me.binToFloat(me.incMantissa(me.floatToBin(num))), digit); } };