gpt4 book ai didi

java - 将十六进制转换为十进制(纬度/经度)?

转载 作者:行者123 更新时间:2023-11-29 04:41:36 25 4
gpt4 key购买 nike

我得到了十六进制的纬度和经度值:

0AF6CF83
D89B2933

将它们转换为十进制我得到...

 183947139
-660920013

问题是,如何使用 Java 获取以下格式的小数?

 18.3947139
-66.0920013

这就是我实际将十六进制转换为十进制的方式:

public static int hex2Decimal(String s) {
long longValue = Long.parseLong(s, 16);
int intValue = (int)longValue;
return intValue;
}

最佳答案

您需要先将十六进制值解析为int,然后 将其乘以 1e-7 (乘以会更快1e-7 除以 1e7) 除以 1e7
感谢@RolandIllig pointing out精度问题。

然而,Integer.parseInt()不允许将 8 位十六进制值解析为负整数值,即当高位打开时。

在 Java 8 中,你会这样做:

public static double hex2Decimal(String s) {
return Integer.parseUnsignedInt(s, 16) / 1e7;
}

如果您的代码需要在 Java 8 之前的版本上运行,请执行以下操作:

public static double hex2Decimal(String s) {
return (int)Long.parseLong(s, 16) / 1e7;
}

测试

System.out.println(hex2Decimal("0AF6CF83"));
System.out.println(hex2Decimal("D89B2933"));

输出

18.3947139
-66.0920013

关于java - 将十六进制转换为十进制(纬度/经度)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39007972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com