![]() |
1
6
您可以通过强制转换为int来完成这项工作,正如您已经在代码中所做的那样,您已经尝试过了。 我理解你感到不满意,因为你认为你找到了一个例子,当你的尝试将四舍五入而不是删除小数部分。 您尝试使用值1.9999999999999999,但您注意到将其强制转换为int会产生值2的int。由此得出的结论是,强制转换不只是删除小数部分,而是四舍五入到最接近的整数2。 你的结论是错误的。数字2不是作为强制转换为int的结果获得的。数字2是编译器分析写入的文字值1.99999999999999的结果。双打没有无限的精度。这意味着你不能写尽可能多的小数,并期望它能正确地保存在一个双值中。双打优惠 近似值 你的要求。因此,当您键入文字值1.9999999999999999时,编译器知道它不能准确地表示该值,而是将其作为 最近的 可以用双精度表示的值。 最接近1.9999999999999999的可表示值为2。就Java编译器而言,这两个数字是相同的。 所以当你写:
Java编译器把它完全等同于:
你会注意到,在这一点上,你还没有做任何尝试去减少小数,只保留整个部分。您只声明了double的值,就您而言,这个值很可能有小数部分。 只有在以下情况下才会尝试保留整个值:
这里的小数被删除,而int只包含double值所包含的全部内容。 然而,在您的示例中,因为您的双精度值是2.0,所以取它的整个部分是2。这不是四舍五入。那不是别的,只保留整个部分。 正确的方法是去掉小数,只保留整个部分,将其强制转换为int。 (如果能够操作1.999999999999等值,并且这些值与2.0不相同,则不能使用双精度值。它们没有足够的精度。您应该使用bigdecimal和新的bigdecimal(“1.99999999999999”)。必须使用字符串而不是浮点值调用构造函数,因为浮点值不能表示所需的值。) |
![]() |
2
1
|
![]() |
3
0
我已经这样做了,但这不是一个很好的解决方案,但我有:
|
![]() |
4
-1
如果我理解你的问题,你可以用
|