问题描述
在Java中,我想将double转换为整数,我知道是否这样做:
double x = 1.5;
int y =(int)x;
您会得到y = 1。如果你这样做:
int y =(int)Math.round
你可能会得到2.然而,我想知道:因为整数的双重表示有时看起来像1.9999999998或某事,是否有可能通过Math.round()创建一个double,仍然会导致一个截断的数字,而不是我们正在寻找的四舍五入的数字(即:1代替代码中的2代表) ?
(是的,我的意思是这样的:有x的任何值,其中y将显示一个结果截断而不是x的圆角表示)
如果是这样:有一个更好的方法使double成为一个圆整的int而不会有截断的风险? p>
想象:Math.round(x)返回长整型,而不是双精度。因此:Math.round()不可能返回一个看起来像3.9999998的数字。因此,int(Math.round())永远不需要截断任何东西,并且总是工作。
In Java, I want to convert a double to an integer, I know if you do this:
double x = 1.5;
int y = (int)x;
you get y=1. If you do this:
int y = (int)Math.round(x);
You'll likely get 2. However, I am wondering: since double representations of integers sometimes look like 1.9999999998 or something, is there a possibility that casting a double created via Math.round() will still result in a truncated down number, rather than the rounded number we are looking for (i.e.: 1 instead of 2 in the code as represented) ?
(and yes, I do mean it as such: Is there any value for x, where y will show a result that is a truncated rather than a rounded representation of x?)
If so: Is there a better way to make a double into a rounded int without running the risk of truncation?
Figured something: Math.round(x) returns a long, not a double. Hence: it is impossible for Math.round() to return a number looking like 3.9999998. Therefore, int(Math.round()) will never need to truncate anything and will always work.
No, round()
will always round your double to the correct value, and then, it will be cast to an long
which will truncate any decimal places. But after rounding, there will not be any fractional parts remaining.
Here are the docs from Math.round(double)
:
这篇关于在java中将double转换为整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!