ang-tool
Version:
JavaScript常用方法的封装|Encapsulation of common JavaScript methods
74 lines (56 loc) • 2.38 kB
HTML
<!-- <script>
function add (num1, num2) {
function helperNumberDecimal (numStr) {
return (numStr.split('.')[1] || '').length
}
/**
* 数值转字符串,科学计数转字符串
* @param { Number } num 数值
*
* @return {Number}
*/
function toNumberString (num) {
var rest = '' + num
var scienceMatchs = rest.match(/^([-+]?)((\d+)|((\d+)?[.](\d+)?))e([-+]{1})([0-9]+)$/)
if (scienceMatchs) {
var isNegative = num < 0
var absFlag = isNegative ? '-' : ''
var intNumStr = scienceMatchs[3] || ''
var dIntNumStr = scienceMatchs[5] || ''
var dFloatNumStr = scienceMatchs[6] || ''
var sciencFlag = scienceMatchs[7]
var scienceNumStr = scienceMatchs[8]
var floatOffsetIndex = scienceNumStr - dFloatNumStr.length
var intOffsetIndex = scienceNumStr - intNumStr.length
var dIntOffsetIndex = scienceNumStr - dIntNumStr.length
if (sciencFlag === '+') {
if (intNumStr) {
return absFlag + intNumStr + helperStringRepeat('0', scienceNumStr)
}
if (floatOffsetIndex > 0) {
return absFlag + dIntNumStr + dFloatNumStr + helperStringRepeat('0', floatOffsetIndex)
}
return absFlag + dIntNumStr + helperNumberOffsetPoint(dFloatNumStr, scienceNumStr)
}
if (intNumStr) {
if (intOffsetIndex > 0) {
return absFlag + '0.' + helperStringRepeat('0', Math.abs(intOffsetIndex)) + intNumStr
}
return absFlag + helperNumberOffsetPoint(intNumStr, intOffsetIndex)
}
if (dIntOffsetIndex > 0) {
return absFlag + '0.' + helperStringRepeat('0', Math.abs(dIntOffsetIndex)) + dIntNumStr + dFloatNumStr
}
return absFlag + helperNumberOffsetPoint(dIntNumStr, dIntOffsetIndex) + dFloatNumStr
}
return rest
}
function helperNumberAdd (addend, augend) {
var str1 = toNumberString(addend)
var str2 = toNumberString(augend)
var ratio = Math.pow(10, Math.max(helperNumberDecimal(str1), helperNumberDecimal(str2)))
return (multiply(addend, ratio) + multiply(augend, ratio)) / ratio
}
return helperNumberAdd(toNumber(num1), toNumber(num2))
}
</script> -->