提问人:leora 提问时间:3/11/2009 最后编辑:Jon Schneiderleora 更新时间:11/17/2019 访问量:207421
如何将双精度转换为最接近的整数值?
How might I convert a double to the nearest integer value?
答:
使用 ,可能与 结合使用Math.round()
MidpointRounding.AwayFromZero
例如:
Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3
评论
Convert.ToInt32()
Convert.ToInt16(NumberToConvert);
16
32
64
double d = 1.234;
int i = Convert.ToInt32(d);
按如下方式处理舍入:
四舍五入到最接近的 32 位有符号整数。如果值是中途 在两个整数之间,返回偶数;即 4.5 转换为 4,5.5 转换为 6。
评论
Math.Round
[0,.5)
[.5,1)
(.5,1.5)
[1.5,2.5]
double d;
int rounded = (int)Math.Round(d);
我正在开发一个带有 Int 按钮的科学计算器。我发现以下是一个简单、可靠的解决方案:
double dblInteger;
if( dblNumber < 0 )
dblInteger = Math.Ceiling(dblNumber);
else
dblInteger = Math.Floor(dblNumber);
Math.Round 有时会产生意外或不希望的结果,并且显式转换为整数(通过 cast 或 Convert.ToInt...)通常会为更高精度的数字生成错误值。上述方法似乎总是有效。
评论
Ceiling
是我们需要四舍五入的正数。完善!点赞。
您还可以使用函数:
//Works with negative numbers now
static int MyRound(double d) {
if (d < 0) {
return (int)(d - 0.5);
}
return (int)(d + 0.5);
}
根据架构的不同,它的速度要快几倍。
评论
我知道这个问题很老,但我在寻找类似问题的答案时遇到了它。我想我会分享我得到的非常有用的提示。
转换为 int 时,只需在向下转换之前添加您的值即可。由于 downcast to 总是下降到较低的数字(例如),如果您的数字是或更高,则相加会将其调高到下一个数字,并且您的下沉到 应该返回正确的值。(例如.5
int
(int)1.7 == 1
.5
.5
int
(int)(1.8 + .5) == 2
)
评论
+ 0.5 * Math.Abs(d)
对于 Unity,请使用 Mathf.RoundToInt。
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
void Start()
{
// Prints 10
Debug.Log(Mathf.RoundToInt(10.0f));
// Prints 10
Debug.Log(Mathf.RoundToInt(10.2f));
// Prints 11
Debug.Log(Mathf.RoundToInt(10.7f));
// Prints 10
Debug.Log(Mathf.RoundToInt(10.5f));
// Prints 12
Debug.Log(Mathf.RoundToInt(11.5f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.0f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.2f));
// Prints -11
Debug.Log(Mathf.RoundToInt(-10.7f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.5f));
// Prints -12
Debug.Log(Mathf.RoundToInt(-11.5f));
}
}
public static int RoundToInt(float f) { return (int)Math.Round(f); }
评论
如果浮点值超出 Int 范围,则其他答案中的方法将引发。https://learn.microsoft.com/en-us/dotnet/api/system.convert.toint32?view=netframework-4.8#System_Convert_ToInt32_System_Single_OverflowException
int result = 0;
try {
result = Convert.ToInt32(value);
}
catch (OverflowException) {
if (value > 0) result = int.MaxValue;
else result = int.Minvalue;
}
下一个:浮点数学坏了吗?
评论