当前位置: 首页 > 知识库问答 >
问题:

如何使用BigDecimal来实现以下代码,而不是使用double或float?

艾奕
2023-03-14

我有这个代码

public static double distance(double lat1, double lon1, double lat2, double lon2, char unit) {      
      double theta = lon1 - lon2;
      double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
      dist = Math.acos(dist);
      dist = rad2deg(dist);
      dist = dist * 60 * 1.1515;
      if (unit == 'K') {
        dist = dist * 1.609344;     
      } else if (unit == 'N') {     
        dist = dist * 0.8684;   
      }
      return (dist);
    }

但是由于上述代码的精度损失,我不得不通过为lat1、lon1、lat2、lon2提供BigDecimal而不是Double来更改它。但问题是如果我使用BigDecimal,我如何实现所有这些操作?
请指导我实现这一点
谢谢:)

共有1个答案

燕昊东
2023-03-14

灵感来自这篇文章:如何转换BigDecimal双Java?

可能是一个转换应该工作吗?

BigDecimal bd; // the value you get
double d = bd.doubleValue(); // The double you want
 类似资料:
  • 问题内容: 建议在处理现实世界的货币值时,使用BigDecimal而不是Double。但是我没有令人信服的解释,只是“通常是这样做的”。 您能谈谈这个问题吗? 问题答案: 这称为精度损失,在处理非常大的数字或非常小的数字时非常明显。在许多情况下,带小数的十进制数字的二进制表示形式是近似值,而不是绝对值。要了解为什么需要阅读二进制形式的浮点数表示形式。这是链接:http : //en.wikiped

  • 问题内容: 与JNI相比,JNA似乎更易于调用本机代码。在什么情况下,您将在JNA上使用JNI? 问题答案: JNA不支持c 类的映射,因此,如果您使用的是c 库,则需要一个jni包装器 如果需要大量内存复制。例如,您调用一个返回大字节缓冲区的方法,对其中的内容进行更改,然后需要调用使用此字节缓冲区的另一种方法。这将需要您将该缓冲区从c复制到java,然后再将其从java复制回到c。在这种情况下,

  • 我有一些代码,包括检查用户输入,看看输入是字符串还是int,并将根据结果执行不同的代码。我使用integer.ParseInt来确定用户输入是否是整数,如果不是,则抛出NumberFormatException。

  • 问题内容: 一直有人告诉我,永远不要用或类型来代表金钱,这一次我向您提出一个问题:为什么? 我敢肯定有一个很好的理由,我根本不知道这是什么。 问题答案: 因为浮点数和双精度数不能准确代表我们用于货币的基数10的倍数。这个问题不仅仅针对Java,而且还针对任何使用base 2浮点类型的编程语言。 在基数10中,您可以将10.25编写为1025 * 10 -2(整数乘以10的幂)。IEEE-754浮点

  • 我正在学习使用MapStruct。 我有以下自定义映射配置,以这种方式将从JPA实体映射到DTO: 我对这个解决方案的问题是中的Java代码实际上是一个字符串,IDE(例如IntelliJ)没有检查这个“java”代码的语法。也许在重构之后,这段代码将不再工作,因为我重命名了相关字段。 如果我在表达式中添加一个检查,那么这段代码会更长,更长的代码可能会有更多的打字错误。 我可以在这里写一个真正的j

  • 问题内容: 我找到了一篇有用的文章,解释了如何使Jersey使用SLF4J而不是JUL。现在,我的单元测试看起来像(并且很完美): 我的包括以下依赖项: 它运行完美,但是我不想在每个单元测试中都进行相同的配置。这是很明显的代码重复,我想避免。我怎样才能更有效地做到这一点? ps。也许不可能优化上面的代码,而我正在尽力而为? 问题答案: 最好的方法是通过自定义Listener。在JSF servle