Java 如何转换为整数和don';不要失去精度
我有一个非常接近1的双精度值。我怎样才能将它转换为1? 我这样做Java 如何转换为整数和don';不要失去精度,java,int,Java,Int,我有一个非常接近1的双精度值。我怎样才能将它转换为1? 我这样做 double myValue = 0.9999; double a = Math.round(myValue); int intValue = (int)a; 但即使myValue在[0.5,1]范围内,它也会返回1,因此我失去了精度。仅当myValuse非常接近1(exp:0.999)时,我希望它返回1,例如,当myValue为0.6时,它不应返回1 感谢您的帮助尝试以下方法: final double threshol
double myValue = 0.9999;
double a = Math.round(myValue);
int intValue = (int)a;
但即使myValue在[0.5,1]范围内,它也会返回1,因此我失去了精度。仅当myValuse非常接近1(exp:0.999)时,我希望它返回1,例如,当myValue为0.6时,它不应返回1
感谢您的帮助尝试以下方法:
final double threshold = 0.0001;
if (Math.abs(a - 1) < threshold)
intValue = 1;
else
intValue = 0;
是专门为此设计的。如果你想做一些不同的事情,你必须自己编写代码
例如,如果希望.8
和更高的数值舍入为1,而不是.5
和更高的数值(请参见下面关于负数的注释):
在那里,我们:
Math.floor
)放入基数,截断小数部分=
.8,则在基中添加一个
myValue
符号上进行分支,并在负数时使用(并相应地调整myValue-base
)。还有一个问题是,同样的截止线是适用的,还是对称的?截止值应该是-0.8还是-0.2?我将以你想要的方式处理负值作为你的练习
这就是说,这感觉比它应该是更复杂。也许像这样的事情对你正在努力做的事情有用。(在处理底片时,可能必须是
+0.3
而不是-0.3
。您还期望什么?@amani92 0.7怎么样?0.8? 0.9? 0.95? 0.99? 规则是什么?@amani92那么:规则是什么?任何低于0.9的值都四舍五入到0,任何介于0.9和1之间的值都四舍五入到1?@DawoodibnKareem:我一直试图说服自己,这是可行的,而不是我下面复杂的解决方案。我想它会。。。也许可以充实一下(通过测试证明它在一系列值上都有效),然后作为答案发布?@T.J.Crowder我不相信在提问者明确要求之前回答问题。在这种情况下,我一点也不清楚amani92到底想要什么——特别是当涉及到更大的数字时。所以我想提醒她,让她澄清她的要求。如果她不这样做,她就得不到我的回答。谢谢u@t.J.Crowder,但我正在寻找一种更简单的方法precision@amani92:祝你好运。这个要求是不寻常的,上面的要求也不那么复杂。(但同样:根据您的实际需求,可能会提供一种更简单的方法。)您完全不清楚为什么认为0.9应该变成0,但0.99应该变成1。这肯定不是一个更“精确”的结果。恰恰相反。这不是标准API的一部分是有原因的。这没有多大意义。
if (a >= 0.9999)
intValue = 1;
else
intValue = 0;
double myValue = 0.9999;
int base = (int)Math.floor(myValue);
double remainder = myValue - base;
int intValue = remainder >= .8 ? base + 1 : base;