加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何将数字从double转换为int而不进行舍入?

发布时间:2020-12-15 08:26:12 所属栏目:Java 来源:网络整理
导读:我想计算容器中可以容纳多少列.首先,我计算出可以容纳多少列,然后计算它们的边距数.之后,我检查它们是否适合边距,如果没有 – 减少一列的数量. 码: int columnMargin = 50;double result = columnContainerHBox/minimalColumnWidth;int columnCount = (int)
我想计算容器中可以容纳多少列.首先,我计算出可以容纳多少列,然后计算它们的边距数.之后,我检查它们是否适合边距,如果没有 – 减少一列的数量.
码:

int columnMargin = 50;
double result = columnContainerHBox/minimalColumnWidth;
int columnCount = (int) result; // here's the problem
int numberOfMargins = columnCount - 1;
double finalCount = columnContainerHBox/minimalColumnWidth*columnCount+columnMargin*numberOfMargins;
if(finalCount<1){
    columnCount--;
}

问题是我不知道如何在没有舍入数字的情况下从double转换为int.我只需要摆脱十进制后的所有数字.我已经尝试过(int)double,(int)Math.floor(double)和new DecimalFormat(‘#’).format(double).作为双人我拿了1.99999999999999999999.以上都将其转换为2.理想的结果 – 1;

我的双重将是完全随机的.它可以是1.0,1.9999999999,2.45,3.5959547324等.

我需要的是得到一个完整的部分并完全丢弃小数后的所有内容.

解决方法

你可以通过转换为int来实现它,因为你已经在你尝试的代码中做了.

我知道你感到不满意,因为你认为你已经找到了一个案例,当你的尝试将四舍五入而不是丢弃小数部分时.

您已尝试使用值1.99999999999999999999并且您已注意到将其转换为int会产生值为2的int.您从那里得出结论,转换不只是丢弃小数部分,而是四舍五入到最接近的整数2.

你的结论是不正确的.由于转换为int而未获得数字2.数字2是编译器解析写入的文字值1.99999999999999999999的结果.双打没有无限精度.这意味着你不能写出你想要的多少小数,并期望它正确保存在double值中.双打仅提供你所要求的近似值.因此,当您键入文字值1.99999999999999999999时,编译器知道它无法准确表示该值,而是将其作为可以在double中表示的最接近的值.

最接近1.99999999999999999999的可表示值是2.就Java编译器而言,这两个数字是同一个.

所以当你写:

double d = 1.99999999999999999999d;

Java编译器将它完全等同于:

double d = 2d;

你会注意到,在这一点上,你还没有尝试删除小数,只保留整个部分.你只为你的double声明了一个值,并且就你而言,这个值很可能有一个小数部分.

您只能在以下情况下尝试保留整个值:

int i = (int)d;

这里删除了小数,你的int只包含double值所包含的全部内容.

但是,在您的示例中,由于您的double值为2.0,因此将整个部分取为2.这不是四舍五入.这不仅仅是保留整个部分.

删除小数而只保留整个部分的正确方法是转换为int.

(如果能够操作诸如1.99999999999999999999之类的值并且它们与2.0不相同很重要,则不能使用双精度.它们没有足够的精度.您应该使用BigDecimal,使用新的BigDecimal(“ 1.99999999999999999999“).必须使用String而不是浮点值调用构造函数,因为浮点值无法表示所需的值.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读