2012-01-14 140 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 2012-01-14 17:55:14

+0

没有看到代码,我们不知道它为什么被转换。以小数点,顺便说一句。 – 2012-01-14 17:55:27

+0

0x000 [NUMBER]是整数(十六进制)的C语言符号。当你使用parseInt时,它将被转换为一个整数。 – Codebeat 2012-01-14 18:01:03

回答

1

请张贴您的确切代码。在某处,它被视为一个数字而不是一个字符串,并且您将看到十六进制数字(0x90D)的十进制表示形式(2317)。

如果您确实希望将其视为字符串,并且它在源代码中,请确保该值被引号包围。

否则,如果这是一个变量(假设x),你可以在一定程度回到十六进制格式显示你:

x.toString(16); 

然而,这并不会提供所有额外填充0,从而在(仅)90d。一些额外的解决方案,包括填充,可在How to convert decimal to hex in JavaScript?

+0

即使我将它作为字符串传递,我仍然不明白为什么它将其转换。使用x.toString(16)将其转换回十六进制,我应该能够提供填充。 – user1149389 2012-01-14 18:24:06

+0

@ user1149389 - 尚未发布足够的代码来确定此变量/值的确切路径。我们需要查看值被声明为0x90D的位置以进一步帮助。 – ziesemer 2012-01-14 18:30:02

+0

正在从数据库读入(varchar(50)是字段定义),并将其存入C#中的对象列表中。然后使用Linq过滤这些结果,并且使用jQuery使用Linq查询的结果动态创建一个表。表格的第一列是我用来调用ShowDetails函数的超链接。除了被调用的函数外,它在任何地方都显示为0x000000000000090D。 – user1149389 2012-01-14 18:42:52

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 
相关问题