gpt4 book ai didi

gradle - 在gradle中解析double给出了意外的值

转载 作者:行者123 更新时间:2023-12-03 05:09:13 24 4
gpt4 key购买 nike

我在gradle中编写了一个任务,当创建jar文件时,该任务会增加我的项目版本号。

我正在使用一个简单的十进制版本号,例如3个小数位:version '2.001'

该代码通过将字符串值解析为 double 值,以0.001递增并替换字符串来工作。当从非零结束值开始递增时,代码可以正常工作。例如2.001正确地增加到2.002。但是,当我尝试解析一个零结束值时,例如2.010,我得到了一个奇怪的错误。当2.010将值Double.parseDouble解析为double时,该值将读取为2.010999999999999997

完整的代码如下:

task increaseVersionCode {
double versionCode = Double.parseDouble(version.toString())

println versionCode
versionCode += 0.001
println versionCode
println "version '$version'"
println "version '" + versionCode + "'"

String newBuildFile = buildFile.getText().replaceFirst("version '$version'","version '" + versionCode + "'")

buildFile.setText(newBuildFile)
}

当版本为 println时, version '2.010'的结果如下:
2.0109999999999997
2.0119999999999996
version '2.0109999999999997'
version '2.0119999999999996'

任何想法为什么会发生这种情况?

最佳答案

为了进行说明,还请看看this answerthis one,这都是关于内部表示的。

对于解决方案,请使用BigDecimal

double a = 2.010 + 0.001;
System.out.println(a);

BigDecimal b = BigDecimal.valueOf(2.010);
System.out.println(b.add(BigDecimal.valueOf(0.001)));

输出:
2.0109999999999997
2.011

关于gradle - 在gradle中解析double给出了意外的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50831973/

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