JavaScript的parseInt 取整使用
更新時間:2011年05月09日 23:21:47 作者:
JavaScript 是弱類型語言, 為了保證數(shù)值的有效性, 在處理數(shù)值的時候, 我們可以對數(shù)值字符串進(jìn)行強(qiáng)行轉(zhuǎn)換. 如 parseInt 取整和 parseFloat 取浮點數(shù)
Java 也有 Integer.parseInt() 方法, 但是 JavaScript 的 parseInt 處理方式與 Java 等強(qiáng)整型語言不太一樣, 所以經(jīng)常有人因為對這個方法的使用不當(dāng)而獲得異常返回.
下面是一段 Java 代碼, 用于將字符串 020 轉(zhuǎn)為整型.
public class Test {
public static void main(String args[]) throws Exception {
String str = "020";
System.out.println(Integer.parseInt(str));
}
}
輸出結(jié)果是 20
下面是一段 JavaScript 代碼, 同樣是將字符串 020 轉(zhuǎn)為整型.
var str = "020";
var num = parseInt(str);
alert(num);
輸出結(jié)果是 16
為什么呢?
無論是 Java 還是 JavaScript, parseInt 方法都有兩個參數(shù), 第一個參數(shù)就是要轉(zhuǎn)換的對象, 第二個參數(shù)是進(jìn)制基數(shù), 可以是 2, 8, 10, 16, 默認(rèn)以 10 進(jìn)制處理. 但在 JavaScript 中, 0 開始的數(shù)被認(rèn)為使用 8 進(jìn)制處理, 0x 的數(shù)被認(rèn)為是用 16 進(jìn)制來處理. 所以上面的 JavaScript 代碼計算錯誤了.
影響大嗎?
大! 很大! 因為這個經(jīng)常用于計算價錢, 一旦價格錯誤, 對用戶來說, 這是誤導(dǎo), 而一個好的網(wǎng)站不應(yīng)該出現(xiàn)這種誤導(dǎo)用戶的. 下面的 DEMO 中, 沒有指定進(jìn)制. 大家可以在數(shù)量框中輸入一個以 0 開頭的數(shù)字, 在點擊計算按鈕, 算出來的數(shù)值將比預(yù)想中的小一些, 或者小很多 (如: 8 進(jìn)制中沒有 019 這樣的數(shù)值, 所以數(shù)值變成了 1, 9 被忽略掉).
沒有為 parseInt 函數(shù)指定進(jìn)制的 DEMO
如何修改?
前面說過, 有兩個參數(shù), 第二個參數(shù)可以指定計算使用的進(jìn)制.
parseInt(num, radix);
所以我們可以將前面有問題的那段 JavaScript 代碼改寫為下面的代碼.
var str = "020";
var num = parseInt(str, 10);
alert(num);
這樣處理的話, 我們再重寫一些前面的 DEMO, 如下:
為 parseInt 函數(shù)指定進(jìn)制為 10 的 DEMO
記住了, 在 JavaScript 上使用 parseInt 方法時要帶上進(jìn)制參數(shù).
下面是一段 Java 代碼, 用于將字符串 020 轉(zhuǎn)為整型.
復(fù)制代碼 代碼如下:
public class Test {
public static void main(String args[]) throws Exception {
String str = "020";
System.out.println(Integer.parseInt(str));
}
}
輸出結(jié)果是 20
下面是一段 JavaScript 代碼, 同樣是將字符串 020 轉(zhuǎn)為整型.
復(fù)制代碼 代碼如下:
var str = "020";
var num = parseInt(str);
alert(num);
輸出結(jié)果是 16
為什么呢?
無論是 Java 還是 JavaScript, parseInt 方法都有兩個參數(shù), 第一個參數(shù)就是要轉(zhuǎn)換的對象, 第二個參數(shù)是進(jìn)制基數(shù), 可以是 2, 8, 10, 16, 默認(rèn)以 10 進(jìn)制處理. 但在 JavaScript 中, 0 開始的數(shù)被認(rèn)為使用 8 進(jìn)制處理, 0x 的數(shù)被認(rèn)為是用 16 進(jìn)制來處理. 所以上面的 JavaScript 代碼計算錯誤了.
影響大嗎?
大! 很大! 因為這個經(jīng)常用于計算價錢, 一旦價格錯誤, 對用戶來說, 這是誤導(dǎo), 而一個好的網(wǎng)站不應(yīng)該出現(xiàn)這種誤導(dǎo)用戶的. 下面的 DEMO 中, 沒有指定進(jìn)制. 大家可以在數(shù)量框中輸入一個以 0 開頭的數(shù)字, 在點擊計算按鈕, 算出來的數(shù)值將比預(yù)想中的小一些, 或者小很多 (如: 8 進(jìn)制中沒有 019 這樣的數(shù)值, 所以數(shù)值變成了 1, 9 被忽略掉).
沒有為 parseInt 函數(shù)指定進(jìn)制的 DEMO
如何修改?
前面說過, 有兩個參數(shù), 第二個參數(shù)可以指定計算使用的進(jìn)制.
復(fù)制代碼 代碼如下:
parseInt(num, radix);
所以我們可以將前面有問題的那段 JavaScript 代碼改寫為下面的代碼.
復(fù)制代碼 代碼如下:
var str = "020";
var num = parseInt(str, 10);
alert(num);
這樣處理的話, 我們再重寫一些前面的 DEMO, 如下:
為 parseInt 函數(shù)指定進(jìn)制為 10 的 DEMO
記住了, 在 JavaScript 上使用 parseInt 方法時要帶上進(jìn)制參數(shù).
您可能感興趣的文章:
- js parseInt的陷阱分析小結(jié)
- js中parseInt函數(shù)淺談
- 關(guān)于javascript中的parseInt使用技巧
- js parsefloat parseint 轉(zhuǎn)換函數(shù)
- javascript中的parseInt和parseFloat區(qū)別
- javascript中parseInt()函數(shù)的定義和用法分析
- javascript parseInt() 函數(shù)的進(jìn)制轉(zhuǎn)換注意細(xì)節(jié)
- JS實現(xiàn)手寫parseInt的方法示例
- javascript parseInt 大改造
- Js中parseInt的使用及注意事項
相關(guān)文章
JavaScript函數(shù)節(jié)流和函數(shù)防抖之間的區(qū)別
本文主要介紹了JavaScript函數(shù)節(jié)流和函數(shù)防抖之間的區(qū)別。具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02JS實現(xiàn)點擊li標(biāo)簽彈出對應(yīng)的索引功能【案例】
這篇文章主要介紹了JS實現(xiàn)點擊li標(biāo)簽彈出對應(yīng)的索引功能,結(jié)合具體實例形式分析了javascript事件響應(yīng)、元素遍歷等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02js以分隔符分隔數(shù)組中的元素并轉(zhuǎn)換為字符串的方法
下面小編就為大家?guī)硪黄猨s以分隔符分隔數(shù)組中的元素并轉(zhuǎn)換為字符串的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11實例解析js中try、catch、finally的執(zhí)行規(guī)則
本文主要通過實例解析來更好的了解js中try、catch、finally的執(zhí)行規(guī)則,具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02JavaScript實現(xiàn)讀取上傳視頻文件的時長和第一幀畫面過程講解
當(dāng)我們做一個后臺系統(tǒng)的音視頻管理模塊時,通常要限制文件的大小和類型,這篇文章主要介紹了JavaScript實現(xiàn)讀取上傳視頻文件的時長和第一幀畫面過程,需要詳細(xì)了解實現(xiàn)方法可以參考下文2023-05-05微信小程序修改swiper默認(rèn)指示器樣式的實例代碼
這篇文章主要介紹了微信小程序修改swiper默認(rèn)指示器樣式的實例代碼,代碼塊是從微信開發(fā)文檔中心復(fù)制的代碼塊,在此基礎(chǔ)上修改官方swiper樣式,需要的朋友可以參考下2018-07-07