java如何将双1.4000000000000001转换为1.4?

day*_*mer -1 java floating-point double

我有一个方法

  private static double getMinorVersion(final double minorVersion) {
        return minorVersion + 0.1;
  }
Run Code Online (Sandbox Code Playgroud)

当我测试这个

   final Version version = new Version(1.3, VersionType.MINOR, 0.0);
   final Version newVersion = versionManager.patch(version);
   assertEquals(1.4, newVersion.getVersionNumber(), delta); // delta = 0.0
Run Code Online (Sandbox Code Playgroud)

我明白了

java.lang.AssertionError: 
Expected :1.4
Actual   :1.4000000000000001
Run Code Online (Sandbox Code Playgroud)

我怎样才能修复它1.4

dus*_*uff 7

不要使用doubles来表示软件版本号.它们应该存储为字符串.

除了遇到精确问题,就像你已经注意到的那样,版本号不是十进制数.例如,约定是版本号1.1并且1.10不相等(相反,1.10是下面的版本1.9),并且版本号通常包含多个句点(例如1.1.1)或非数字字符(例如1.0b2).