如何将数字从双精度转换为整数而不进行舍入?

阿柳娜:

我想计算容器中可以容纳多少列。首先,我计算可以容纳多少列,然后计算它们的边距数量。之后,我检查它们是否适合页边距,如果没有,请减少一列。码:

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--;
}

问题是,我不知道如何从转换doubleint无舍入数。我只需要删除小数点后的所有数字。我已经尝试过(int) double(int)Math.floor(double)new DecimalFormat('#').format(double)作为一个double我拿了1.99999999999999999999。以上所有都将其转换为2。理想结果-1;

double将完全是随机的。可以是1.0、1.99999999999、2.45、3.5959547324等。

我需要得到一个完整的部分,并完全舍弃小数点后的所有内容。

冲突:

您可以通过强制转换为int来完成此操作,就像您在尝试提供的代码中所做的那样。

我了解您不满意,因为您认为找到了一种情况,即您尝试将取整该值而不是舍去小数部分。

您尝试使用值1.99999999999999999999,并且注意到将其强制转换为int会产生一个值2的int。您得出的结论是,强制转换不仅舍去了小数部分,而且四舍五入为最接近的整数2。

您的结论不正确。由于转换为int而没有获得数字2。数字2是编译器解析书面文字值1.99999999999999999999的结果。双打没有无限的精度。这意味着您无法编写所需的小数位数,并期望将其正确地保留为双精度值。双打只提供您所要询问的近似值因此,当您键入文字值1.99999999999999999999时,编译器会知道它无法准确表示该值,而是将其视为可以用双精度表示的最接近值。

最接近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和new BigDecimal(“ 1.99999999999999999999“)。必须使用String而不是浮点值来调用构造函数,因为浮点值无法表示所需的值。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将float严格转换为整数而不进行舍入?

如何将双精度变量转换为整数变量?

如何将浮点数转换为4位小数而不进行舍入?

如何将双精度数转换为最接近的整数值?

如何将各种未知数字类型转换为双精度

如何防止gson将整数转换为双精度

如何将整数转换为数字

如何将字符串从双精度转换为双精度*

如何将字符串转换为双精度并保持字符串中表示的数字完全相同

为 dplyr::if_else() 将整数转换为数字/双精度数

将双精度数转换为整数尾数和指数

将双精度转换为整数时出错

(C++) 试图将双精度转换为整数(解释)

无法将字符串转换为整数或双精度

如何将IEEE 754双精度(64位)格式的十六进制数字转换为十进制数字?

JavaScript,将数字数组转换为双精度

杰克逊如何将JsonNode转换为ArrayNode而不进行转换?

如何将数字向量转换为整数?

如何将整数转换为罗马数字?

如何将整数转换为数字数组

如何将数字列表转换为整数?

如何在C ++中安全地将双精度型转换为整数?

如何使用sql查询将字符串转换为整数或双精度数

如何使用联合将双精度位逐位转换为 64 位整数

如何将特定格式的字符串转换为双精度

如何将双精度数组转换为 JS 数组?

如何将双精度数组的数据帧转换为向量?

如何将命令行参数转换为用于计算总和的双精度数组?

如何将“任意列表”类型转换为“双精度”类型(Scala)