日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java parseint(12.0),如何实现一个parseInt

發布時間:2024/9/27 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java parseint(12.0),如何实现一个parseInt 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何實現一個parseInt

function(string, [radix]) {}

如果string不為字符串類型, 則先將string轉化為字符串類型

string會忽略前后的空白

依次解析字符, 如果字符不是指定基數中的字符( 例如:2進制中的3、 10進制中的'f' )則停止解析( 首字符為'+'或'-'時除外 ), 返回已經解析好的整數

如果無法解析為整數, 則返回NaN

radix 默認值不為10, 在radix為undefined、0或者沒有指定時, 做以下處理

如果string以'0X'或'0x'開頭時, 基數為16

如果string以'0'開頭時, 基數為8或者10(每個瀏覽器的具體實現不同, es5規定此時為10)

如果string以其他任何字符開頭時, 基數為10

radix的范圍為2-36

不考慮進制radix

代碼實現

const _parseInt = (str, radix) => {

if (typeof str !== 'string') str = String(str)

str = str.trim()

const regex = /^(?[+|-]*)(?d+)/

if (!regex.test(str)) return NaN

const groups = str.match(regex).groups

radix = 10

const arr = groups.num.split('')

const len = arr.length

let result = 0

for(let i = 0; i < len; i++) {

const num = arr[i] * Math.pow(10, len - i - 1)

if (isNaN(num)) break

else result += num

}

return result * (groups.fuhao === '-' ? -1 : 1)

}

測試用例

const assert = require('assert')

assert.strictEqual(_parseInt(null), NaN)

assert.strictEqual(_parseInt('0e0'), 0)

assert.strictEqual(_parseInt('08'), 8)

assert.strictEqual(_parseInt(0.0000003), 3)

assert.strictEqual(_parseInt(0.00003), 0)

assert.strictEqual(_parseInt(-0.0000003), -3)

assert.strictEqual(_parseInt('6.022e23'), 6)

assert.strictEqual(_parseInt(6.022e2), 602)

考慮radix

代碼實現

const _parseInt = (str, radix) => {

// 不為string類型先轉化為string 類型

if (typeof str !== 'string') str = String(str)

// 刪除首尾空白

str = str.trim()

// 正則匹配[+|-]?[0]?[Xx]?[0-9a-fA-F]+

const regex = /^(?[+|-]*)(?[0]?[Xx]?)(?[0-9a-fA-F]+)/

// 無法匹配返回NaN

if (!regex.test(str)) return NaN

// 匹配出符號、進制、數字三個分組

const groups = str.match(regex).groups

// radix的有效范圍為 2-36

if (radix && (radix < 2 || radix > 36)) return NaN

// 如果沒有指定radix, radix 會有以下默認值

if (!radix) {

if (groups.radix.toUpperCase() === '0X') radix = 16

else if (groups.radix === '0') radix = 8

else radix = 10

}

// 挨個字符串解析,如果遇到無法解析時則停止解析,返回已經解析好的整數

let splitArr = groups.num.split('')

const arr = []

for(let i = 0; i < splitArr.length; i++) {

// 根據charCode來做轉行為實際數據, 0-9為[48-57],A-F為[65-70]

const charCode = splitArr[i].toUpperCase().charCodeAt()

let num

// 字符為[A-F]時, 實際數字為charCode -55

if(charCode >= 65) num = charCode - 55

// 字符為[0-9]時, 實際數字為charCode - 48

else num = charCode - 48

// 當實際數字大于radix時, 無法解析則停止字符串遍歷

if (num > radix) {

break

} else {

arr.push(num)

}

}

const len = arr.length

// 當實際數字數組長度為0時, 返回NaN

if(!len) return NaN

let result = 0

// 依次解析實際數字數組, 組合成真正的數字

for(let i = 0; i < len; i++) {

const num = arr[i] * Math.pow(radix, len - i - 1)

result += num

}

// 算法匹配到的正負號

return result * (groups.fuhao === '-' ? -1 : 1)

}

測試用例

const assert = require('assert')

// 以下返回15

assert.strictEqual(_parseInt('0xF', 16), 15)

assert.strictEqual(_parseInt('F', 16), 15)

assert.strictEqual(_parseInt('17', 8), 15)

assert.strictEqual(_parseInt(021, 8), 15)

assert.strictEqual(_parseInt('015', 10), 15)

assert.strictEqual(_parseInt(15.99, 10), 15)

assert.strictEqual(_parseInt('15,123', 10), 15)

assert.strictEqual(_parseInt('FXX123', 16), 15)

assert.strictEqual(_parseInt('1111', 2), 15)

assert.strictEqual(_parseInt('15 * 3', 10), 15)

assert.strictEqual(_parseInt('15e2', 10), 15)

assert.strictEqual(_parseInt('15px', 10), 15)

assert.strictEqual(_parseInt('12', 13), 15)

// 以下返回NaN

assert.strictEqual(_parseInt('Hello', 8), NaN)

assert.strictEqual(_parseInt('546', 2), NaN)

// 以下返回-15

assert.strictEqual(_parseInt('-F', 16), -15)

assert.strictEqual(_parseInt('-0F', 16), -15)

assert.strictEqual(_parseInt('-0XF', 16), -15)

assert.strictEqual(_parseInt(-15.1, 10), -15)

assert.strictEqual(_parseInt(' -17', 8), -15)

assert.strictEqual(_parseInt(' -15', 10), -15)

assert.strictEqual(_parseInt('-1111', 2), -15)

assert.strictEqual(_parseInt('-15e1', 10), -15)

assert.strictEqual(_parseInt('-12', 13), -15)

// 以下返回4

assert.strictEqual(_parseInt(4.7, 10), 4)

assert.strictEqual(_parseInt(4.7 * 1e22, 10), 4)

assert.strictEqual(_parseInt(0.00000000000434, 10), 4)

// 以下返回224

assert.strictEqual(_parseInt('0e0', 16), 224)

總結

以上是生活随笔為你收集整理的java parseint(12.0),如何实现一个parseInt的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。