Javascript 将数字(也是浮点)转换为十六进制,反之亦然

Javascript 将数字(也是浮点)转换为十六进制,反之亦然,javascript,floating-point,hex,Javascript,Floating Point,Hex,我试图创建两个函数:第一个函数将数字(也是浮点数)转换为十六进制字符串,第二个函数将数字(也是浮点数)转换为十六进制字符串 这是我的代码: 函数base10ToBase16(base10){ 常数精度=小数长度(基数10) 常数乘以=base10*数学功率(16,精度) 常量十六进制=相乘的.toString(16) if(isInteger(base10))返回十六进制 返回插入符(十六进制,'.',十六进制.长度-精度) } 函数base16ToBase10(base16){ 常量[int

我试图创建两个函数:第一个函数将数字(也是浮点数)转换为十六进制字符串,第二个函数将数字(也是浮点数)转换为十六进制字符串

这是我的代码:

函数base10ToBase16(base10){
常数精度=小数长度(基数10)
常数乘以=base10*数学功率(16,精度)
常量十六进制=相乘的.toString(16)
if(isInteger(base10))返回十六进制
返回插入符(十六进制,'.',十六进制.长度-精度)
}
函数base16ToBase10(base16){
常量[integerPart,decimalPart]=base16.split('.'))
if(!decimalPart)返回parseInt(integerPart,16)
返回parseInt(integerPart,16)+parseInt(decimalPart,16)/Math.pow(16,decimalPart.length)
}
/////////////////////////
//试验
/////////////////////////
常量数=[0,0.5,1,0.8,0.85,0.855,0.8555100255]
常量hexes=numbers.map(n=>base10ToBase16(n))
console.log(hexes)
console.log(hexes.map(h=>base16ToBase10(h)))
/////////////////////////
//效用函数
/////////////////////////
功能插件(str、toAdd、位置){
返回`${str.slice(0,位置)}${toAdd}${str.slice(位置)}`
}
函数isInteger(值){
返回编号(值)==值和值%1==0
}
函数小数长度(值){
常量[integerPart,decimalPart]=value.toString().split('.'))
返回小数部分?小数部分长度:0

}
您的
base16ToBase10
很好。您的
base10ToBase16
错误。查看代码段输出

函数插入(str、toAdd、position){
返回`${str.slice(0,位置)}${toAdd}${str.slice(位置)}`
}
函数isInteger(值){
返回编号(值)==值和值%1==0
}
函数小数长度(值){
常量[integerPart,decimalPart]=value.toString().split('.'))
返回小数部分?小数部分长度:0
}
函数base10ToBase16(base10){
常数精度=小数长度(基数10)
常数乘以=base10*数学功率(16,精度)
常量十六进制=相乘的.toString(16)
if(isInteger(base10))返回十六进制
返回插入符(十六进制,'.',十六进制.长度-精度)
}
函数base16ToBase10(base16){
常量[integerPart,decimalPart]=base16.split('.'))
if(!decimalPart)返回parseInt(integerPart,16)
返回parseInt(integerPart,16)+parseInt(decimalPart,16)/Math.pow(16,decimalPart.length)
}
常量数=[0,0.5,1,0.8,0.85,0.855,0.8555100255]
常量错误\u hexes=numbers.map(base10ToBase16)
常量hexes=numbers.map(n=>n.toString(16))
console.log(错误的\u hexes+“”)
console.log(hexes+“”)
console.log(“hexes NOT eq error_hexes=,hexes+!=”
错误的_hexes+“”)
常量往返次数=十六进制映射(base16ToBase10)
console.log(数字+“”)
console.log(往返次数+“”)

console.log(“往返次数eq numbers=,往返次数+”==numbers+)
看起来整数工作正常,问题只是浮点数。@Dshiz您的意思是
base10ToBase16
似乎工作正常吗?您是否有一些技巧也可以使用
base16ToBase10
base16ToBase10
正确地将整数转换回整数,但不能将浮点数转换回浮点数,正如您在一个结果中看到的
NaN
,与原始数字相比,其他结果是不正确的。不幸的是,我对如何纠正它没有任何想法。我只想指出一点,其中一个问题是,当基数10小于零时,单位部分会得到一个空字符串。例如,
0.5
转换为
'.8'
。当您尝试将其转换回基数10时,
parseInt('',16)
给出
NaN