2012-01-14 11 views
-1

私は関数に渡す文字列 '0x000000000000090D'を持っています。ただし、関数の警告で表示しようとすると、2317に変換されています。呼び出し関数の警告に表示すると、正しく表示されます。なぜJavaScriptはこれを変換し、それを何に変換していますか?

var tagid = msg[post].TagID.toString(); 
alert(tagid); 
ShowDetails(tagid); 

function ShowDetails(tagid){ 
alert(tagid); 
} 

なぜ変換されているのですか、それは何に変換されているのですか?

ありがとうございます!

+4

通常の作業テストケースを提供すると便利です。あなたの説明をコピーしても問題は解決されません:http://jsfiddle.net/aybba/ – Quentin

+0

コードを見ることなく、なぜそれが変換されているのか分かりません。小数に、btw。 –

+0

0x000 [NUMBER]は、整数(16進数)のC言語表記法です。 parseIntを使用すると、整数に変換されます。 – Codebeat

答えて

1

正確なコードを記載してください。他の場所では、文字列ではなく数字として扱われており、16進数(0x90D)の小数点(2317)が表示されています。

実際にこれが文字列として扱われ、ソースコード内にある場合は、その値が引用符で囲まれていることを確認してください。

これは(xを想定)の変数であればそうでない場合は、あなたが多少戻っあなたが示した進形式に取得することができます。

x.toString(16); 

しかし、これは結果として、すべての追加の0パディングを提供することはありません(のみ)90d。パディングを含むこれに関する追加の解決策は、How to convert decimal to hex in JavaScript?にあります。

+0

私はまだそれを文字列として渡しているにもかかわらず、なぜそれを変換するのか分かりません。 x.toString(16)を使ってそれを16進数に変換すると、パディングを提供できるはずです。 – user1149389

+0

@ user1149389 - この変数/値の正確なパスを判断するのに十分なコードがまだ投稿されていません。さらに役立つように、値が0x90Dとして宣言されている場所を確認する必要があります。 – ziesemer

+0

データベース(varchar(50)はフィールド定義)から読み込まれ、C#のオブジェクトのリストに格納されます。これらの結果はLinqを使用してフィルタリングされ、Linqクエリの結果を使用してjQueryを使用してテーブルを動的に作成しています。テーブルの最初の列は、ShowDetails関数を呼び出すために使用するハイパーリンクです。呼び出された関数を除いて0x000000000000090Dとして表示されます。 – user1149389

1

文字列が実際に文字列の場合、書式設定は変更しないでください。どこかの番号に変換しなければなりません。

このフィドルを参照してください。

http://jsfiddle.net/8SYNJ/

var x = '0x000000000000090D'; 
var div = document.querySelector('div'); 
function show(str) { 
    div.innerHTML = div.innerHTML + '<br/>' + typeof str + ' ' + str; 
} 

show(x); // string 
show(+x); // convert str to num aka decimal 
関連する問題