当前位置: 首页 > 知识库问答 >
问题:

将双精度转换为整数,它是圆形还是只是剥离数字?

皇甫学海
2023-03-14

用double进行一些计算,然后需要将其转换为int。所以我有一个简单的问题,当将double转换为int时,比如7.5,它将返回7。

这是舍入的结果还是小数点后的任何东西?

如果是四舍五入的产物,是不是smart ie 0.1到0.5向下取整,0.6到0.9向上取整?

干杯

共有3个答案

张晨朗
2023-03-14

简单的铸造只会去除小数点后的所有内容。要向上或向下舍入,可以使用Math.round()方法。这将向上或向下取整,并提供一个参数,说明中途要做什么。也可以使用Math.Floor()或Math.Ceiling()方法在强制转换之前隐式地向上舍入或向下舍入。以下是一些示例:

double num1 = 3.5;
double num2 = 3.2;
double num3 = 3.9;

(int)num1 // returns 3;
(int)num2 // returns 3;
(int)num3 // returns 3 also;
(int)Math.Round(num1) // returns 4
(int)Math.Round(num2) // returns 3
(int)Math.Round(num3) // returns 4
(int)Math.Floor(num1) // returns 3
(int)Math.Floor(num2) // returns 3
(int)Math.Floor(num3) // returns 3
(int)Math.Ceiling(num1) // returns 4
(int)Math.Ceiling(num2) // returns 4;
(int)Math.Ceiling(num3) // returns 4;
乌和畅
2023-03-14

不要以为它会向下舍入。它去掉小数部分,纯粹返回双精度值的整数部分。这对负数很重要,因为从2.75向下舍入得到2,但从-2.75向下舍入得到-3。造型不向下舍入,所以(int)2.75等于2,但是(int)-2.75等于-2。

double positiveDouble = 2.75;
double negativeDouble = -2.75;

int positiveInteger = (int) positiveDouble;
int negativeInteger = (int) negativeDouble;

Console.WriteLine(positiveInteger + " = (int)" + positiveDouble);
Console.WriteLine(negativeInteger + " = (int)" + negativeDouble);

Console.ReadLine();

//Output: 2 = (int)2.75
//        -2 = (int)-2.75
汝天宇
2023-03-14

它不舍入,它只返回小数点前的整数部分。

参考(感谢Rawling)显式数字转换表:

将双精度值或浮点值转换为整型时,此值将四舍五入为零,直至最接近的整型值。

您可以通过编写简单的测试自己尝试这样的简单问题。以下测试(使用 NUnit)将通过,因此可以回答您的问题:

[Test]
public void Cast_float_to_int_will_not_round_but_truncate
{
    var x = 3.9f;
    Assert.That((int)x == 3); // <-- This will pass
}
 类似资料:
  • 我试图得到一个double(由两个int的分数得到)作为我下面函数的返回值。 但结果总是错的,我得到的价值如: 预期结果应介于和 我的代码有什么问题! 谢谢

  • 问题内容: 是否有可能做到这一点? 我知道代码可能不会去这样的事情,但怎么也去了? 问题答案: 这将检查双精度值的四舍五入值是否与双精度值相同。 你的变量可能具有或值,并且始终具有int值,因此,如果你的变量等于,则它必须具有int值。 如果变量的值是无穷大或负无穷大,那么这也不起作用,因此向条件添加“只要变量不是无穷大”。

  • 问题内容: 我的json中有整数,并且我不希望gson将其转换为双精度。以下内容不起作用: 输出不是我想要的: 有没有办法在我的地图中使用整数而不是双精度? 编辑: 不是我所有的字段都是整数。我已经相应地修改了我的示例。我已经在线阅读了很多示例,包括此站点上的一些答案,但在特定情况下不起作用。 问题答案: 1)您必须创建自定义而不是您的问题。 2)我不认为这种行为来自解串器。它更像是json对象/

  • 问题内容: 为什么会收到错误,我该如何解决? 如您所见,在声明变量时,我已经尝试过用顶部附近的位置进行替换,但是似乎并没有完成任务。 问题答案: 更改使用数组索引从double到INT所有变量(即变量,,)。数组索引是整数。

  • 我想用一个小数点和一个小数位的格式将任何双精度四舍五入为双精度,这样29575.347434将是2.3。 我试着用decimalFormat做这个,但当我试着我只得到了一个29575.3格式的字符串,带有一个,我不知道如何在保留值为双精度的同时去掉所有小数点。

  • 问题内容: 我有一些这样的代码: 我基本上希望将来避免除以零的异常。 谢谢 问题答案: 如果未显式初始化,则类范围内的数字基元将初始化为零。 必须显式初始化局部范围内的数字基元(方法中的变量)。 如果您只担心被零例外除,那么检查双精度数是否不 完全 为零非常有用。 否则, 当检查浮点值是否为或时为0时,将使用错误阈值来检测该值是否接近0,但不 完全为 0。

  • 我想有一个浮子阵列(双打) 然后我有一个返回最大值的函数 我在将基元数据类型转换为集合时遇到问题。我尝试将其转换为双列表,尝试将myArr转换为char / String来检查一些事情,但显然没有任何效果。 我一直看到原始数据类型的编译错误。我也尝试了< code>Double,但是没有成功。 我怎么可能将数组转换为集合

  • 我想把双精度数字转换为十进制。 例如,我有23.43,双倍值是(使用matlab):174 71 255 122 20 110 55 64现在有了这个,我怎么写一个java程序给我23.43? 下面是matlab中双精度的计算: 1的51到0的分数f