微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Java中将int转换为double,然后返回int

如何解决在Java中将int转换为double,然后返回int

|| 快速提问。 这永远是真的吗?
int i = ...;
double d = i;
if (i == (int) d) ...
还是我需要四舍五入来确定?
if (i == Math.round(d)) ...
    

解决方法

        是的,所有可能的
int
值都可以安全地往返于
double
。 您可以使用以下代码进行验证:
    for (int i = Integer.MIN_VALUE; ; i++) {
        double d = i;
        if (i != (int) d) {
            throw new IllegalStateException(\"i can\'t be converted to double and back: \" + i);
        }
        if (i == Integer.MAX_VALUE) {
            break;
        }
    }
请注意,我没有使用普通的
for
循环,因为它会跳过
Integer.MAX_VALUE
或无限期地循环。 请注意,
int
/
float
long
/
double
并非如此!     ,        如果您的计算机运行缓慢,或者没有时间运行循环来进行自我检查,请参阅Java语言规范的相关部分,第5.1.2节“扩展转换”:   以下针对基本类型的19种特定转换称为扩展基本类型转换:         字节到short,int,long,float或double   短至int,long,float或double   char转换为int,long,float或double   int转换为long,float或double   长时间漂浮或翻倍   浮动到两倍         扩展原始转换不会丢失有关数值总体大小的信息。确实,从整数类型扩展到另一整数类型,再从浮点数转换为双精度的转换根本不会丢失任何信息。数值将精确保留。 [...] (以下第5.1.3节“缩小原始转换”可确保返回的方法double-> int也不会丢失任何信息。)     ,        Joachim解决方案的一种变体。
int i=Integer.MIN_VALUE;
do {
    if(i != (int)(double) i) throw new AssertionError(i + \" != (int)(double) \"+i);
} while(i++ < Integer.MAX_VALUE);
查找导致转换浮动错误的最小值。
int i = 0;
do {
    if(i != (int)(float) i) throw new AssertionError(i + \" != (int)(float) \"+i);
} while(i++ < Integer.MAX_VALUE);
版画
java.lang.AssertionError: 16777217 != (int)(float) 16777217
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。