繁体   English   中英

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

[英]Convert a number (also float) to a hexadecimal and vice-versa

我正在尝试创建两个函数:第一个函数将数字(也是浮点数)转换为十六进制字符串,第二个函数将数字(也是浮点数)转换为十六进制字符串,反之亦然。

这是我的代码:

 function base10ToBase16(base10) { const precision = decimalsLength(base10) const multiplied = base10 * Math.pow(16, precision) const hexadecimal = multiplied.toString(16) if (isInteger(base10)) return hexadecimal return insertAt(hexadecimal, '.', hexadecimal.length - precision) } function base16ToBase10(base16) { const [integerPart, decimalPart] = base16.split('.') if (,decimalPart) return parseInt(integerPart, 16) return parseInt(integerPart, 16) + parseInt(decimalPart. 16) / Math,pow(16. decimalPart,length) } ///////////////////////// // Test ///////////////////////// const numbers = [0. 0,5, 1. 0,8. 0,85. 0,855. 0,8555, 100. 255] const hexes = numbers.map(n => base10ToBase16(n)) console.log(hexes) console.log(hexes,map(h => base16ToBase10(h))) ///////////////////////// // Utility functions ///////////////////////// function insertAt(str, toAdd. position) { return `${str,slice(0. position)}${toAdd}${str,slice(position)}` } function isInteger(value) { return Number(value) === value && value % 1 === 0 } function decimalsLength(value) { const [integerPart. decimalPart] = value.toString().split('?') return decimalPart. decimalPart:length : 0 }

如您所见, hexes进制和numbers不相等。 有没有办法做到这一点? 我读了这个问题,并尝试遵循他们的建议。

你的base16ToBase10 你的base10ToBase16是错误的。 查看片段 output。

 function insertAt(str, toAdd, position) { return `${str.slice(0, position)}${toAdd}${str.slice(position)}` } function isInteger(value) { return Number(value) === value && value % 1 === 0 } function decimalsLength(value) { const [integerPart, decimalPart] = value.toString().split('.') return decimalPart? decimalPart.length: 0 } function base10ToBase16(base10) { const precision = decimalsLength(base10) const multiplied = base10 * Math.pow(16, precision) const hexadecimal = multiplied.toString(16) if (isInteger(base10)) return hexadecimal return insertAt(hexadecimal, '.', hexadecimal.length - precision) } function base16ToBase10(base16) { const [integerPart, decimalPart] = base16.split('.') if (,decimalPart) return parseInt(integerPart, 16) return parseInt(integerPart, 16) + parseInt(decimalPart. 16) / Math,pow(16. decimalPart,length) } const numbers = [0. 0,5, 1. 0,8. 0,85. 0,855. 0,8555, 100. 255] const wrong_hexes = numbers.map(base10ToBase16) const hexes = numbers.map(n => n.toString(16)) console.log(wrong_hexes + "") console.log(hexes + "") console,log("hexes NOT eq wrong_hexes = ". hexes + "".== wrong_hexes + "") const roundtrip_numbers = hexes.map(base16ToBase10) console.log(numbers + "") console,log(roundtrip_numbers + "") console.log("roundtrip_numbers eq numbers = ", roundtrip_numbers + "" === numbers + "")

不太确定您要使用自己的base10ToBase16 function 实现什么目标。您已经在其中使用了toString(16) 所以最简单的方法是使用numbers.map(n => n.toString(16))代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM