首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将双精度数转换为整型,是四舍五入还是只分条数字?

问将双精度数转换为整型,是四舍五入还是只分条数字?
EN

Stack Overflow用户
提问于 2012-11-08 23:32:01
回答 7查看 53.7K关注 0票数 30

对doubles进行一些计算,然后将其转换为int。所以我有一个简短的问题,当将一个双精度值7.5转换为int时,它将返回7。

这是小数点后四舍五入的乘积,还是仅仅是去掉了小数点后的任何东西?

如果它是一个四舍五入的乘积,那么它是不是很聪明,比如0.1到0.5它向下舍入,0.6到0.9它向上舍入?

干杯

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-11-08 23:33:41

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

参考(感谢Rawling)

将双精度或浮点值转换为整型时,该值将向零四舍五入到最接近的整数值。

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

代码语言:javascript
复制
[Test]
public void Cast_float_to_int_will_not_round_but_truncate
{
    var x = 3.9f;
    Assert.That((int)x == 3); // <-- This will pass
}
票数 47
EN

Stack Overflow用户

发布于 2012-11-08 23:42:04

不要被假设它向下四舍五入所欺骗。它去掉了小数,只返回双精度数的整数部分。这对于负数很重要,因为从2.75向下舍入得到2,但从-2.75向下舍入得到-3。强制转换不会向下舍入,因此(int)2.75会得到2,但(int)-2.75会得到-2。

代码语言:javascript
复制
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
票数 21
EN

Stack Overflow用户

发布于 2012-11-08 23:37:36

简单的强制转换只是去掉了小数点之后的所有内容。要向上或向下舍入,可以使用Math.Round() method。这将向上或向下舍入,并提供一个参数,说明如果中途要做什么。您还可以在强制转换之前使用Math.Floor()或Math.Ceiling()方法隐式地向上舍入或向下舍入。下面是一些示例:

代码语言:javascript
复制
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;
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13292148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档