RELATEED CONSULTING
相關咨詢
選擇下列産品馬上(shàng)在線溝通(tōng)
服務時(shí)間(jiān):9:00-18:00
你(nǐ)可(kě)能遇到了下面的問題
關閉右側工具欄
JavaScript的parseInt取整
  • 作(zuò)者:admin
  • 發表時(shí)間(jiān):2013-07-02 14:17:29
  • 來(lái)源:未知

JavaScript 是弱類型語言,為(wèi)了保證數(shù)值的有(yǒu)效性,在處理(lǐ)數(shù)值的時(shí)候,我們可(kě)以對數(shù)值字符串進行(xíng)強行(xíng)轉換。如 parseInt 取整和(hé) parseFloat 取浮點數(shù)。

Java 也有(yǒu) Integer.parseInt() 方法,但(dàn)是 JavaScript 的 parseInt 處理(lǐ)方式與 Java 等強整型語言不太一樣,所以經常有(yǒu)人(rén)因為(wèi)對這個(gè)方法的使用不當而獲得(de)異常返回。

下面是一段 Java 代碼,用于将字符串 020 轉為(wèi)整型。

public class Test {
	public static void main(String args[]) throws Exception {
		String str = "020";
		System.out.println(Integer.parseInt(str));
	}
}

輸出結果是 20

下面是一段 JavaScript 代碼,同樣是将字符串 020 轉為(wèi)整型。

var str = "020";
var num = parseInt(str);
alert(num);

輸出結果是 16

為(wèi)什麽呢?

無論是 Java 還(hái)是 JavaScript,parseInt 方法都有(yǒu)兩個(gè)參數(shù),第一個(gè)參數(shù)就是要轉換的對象,第二個(gè)參數(shù)是進制(zhì)基數(shù),可(kě)以是 2,8,10,16,默認以 10 進制(zhì)處理(lǐ)。但(dàn)在 JavaScript 中,0 開(kāi)始的數(shù)被認為(wèi)使用 8 進制(zhì)處理(lǐ),0x 的數(shù)被認為(wèi)是用 16 進制(zhì)來(lái)處理(lǐ)。所以上(shàng)面的 JavaScript 代碼計(jì)算(suàn)錯誤了。

影(yǐng)響大(dà)嗎?

大(dà)! 很(hěn)大(dà)! 因為(wèi)這個(gè)經常用于計(jì)算(suàn)價錢(qián),一旦價格錯誤,對用戶來(lái)說,這是誤導,而一個(gè)好的網站(zhàn)不應該出現這種誤導用戶的。下面的 DEMO 中,沒有(yǒu)指定進制(zhì)。大(dà)家(jiā)可(kě)以在數(shù)量框中輸入一個(gè)以 0 開(kāi)頭的數(shù)字,在點擊計(jì)算(suàn)按鈕,算(suàn)出來(lái)的數(shù)值将比預想中的小(xiǎo)一些(xiē),或者小(xiǎo)很(hěn)多(duō) (如: 8 進制(zhì)中沒有(yǒu) 019 這樣的數(shù)值,所以數(shù)值變成了 1,9 被忽略掉)。

如何修改?

前面說過,有(yǒu)兩個(gè)參數(shù),第二個(gè)參數(shù)可(kě)以指定計(jì)算(suàn)使用的進制(zhì)。

parseInt(num,radix);

所以我們可(kě)以将前面有(yǒu)問題的那(nà)段 JavaScript 代碼改寫為(wèi)下面的代碼。

var str = "020";
var num = parseInt(str,10);
alert(num);

記住了,在 JavaScript 上(shàng)使用 parseInt 方法時(shí)要帶上(shàng)進制(zhì)參數(shù)。