将Float转换为Int

时间:2014-02-20 02:02:28

标签: c#

所以我有一个我正在研究的项目。这是我唯一的错误:

  

无法将类型'float'隐式转换为'int'。

我理解这意味着什么。我只需要帮助将我的浮点数转换为int。

这只是其中一个花车的一个例子:

float key = 0.5f;
int key = 53;

以下是具体的代码部分:

// price in scrap, e.g. 29 / 9 = 3.33 ref
static int BuyPricePerTOD = 21;
// price in scrap, e.g. 31 / 9 = 3.55 ref
static float SellPricePerTOD = BuyPricePerTOD + 0.5F;

static int BuyPricePerKey = 53;
static float SellPricePerKey = BuyPricePerKey + 0.5F;

static int TimerInterval = 170000;
static int InviteTimerInterval = 2000;

int UserWeapAdded,UserScrapAdded,UserRecAdded,UserRefAdded,
    UserKeysAdded,UserTODAdded,BotTODsAdded,BotKeysAdded,
    BotScrapAdded,BotRecAdded,BotRefAdded,InventoryMetal,
    InventoryScrap,InventoryRec,InventoryRef,InventoryKeys,
    InventoryTOD,PreviousTODs,PreviousKeys,WhileLoop,InvalidItem = 0;

float UserMetalAdded, BotMetalAdded, OverpayNumKeys,
    OverpayNumTOD, ExcessInScrapKey, ExcessInScrapTOD = 0.0F;
double ExcessRefinedKey, ExcessRefinedTOD = 0.0;

2 个答案:

答案 0 :(得分:13)

首先,有整数浮点数字。整数总是整数,例如01-32421337。另一方面,浮点数可以具有小数部分:01-32.142.7和{{1}都是有效的浮点数。

在整数(123.456788)和浮点(int)数字之间进行转换时,您可以这样做:

float

但你不能这样做:

int someInt = 42;
float someFloat = someInt;  // 42.0f

第一次转换的原因是,将整数(float someFloat = 42.7f; int someInt = someFloat; // ? )转换为浮点数(int)会使更改数字。这是一种安全的转换,因此可以隐式

不允许第二次转换的原因是将浮点数(可能包含小数部分)转换为整数(从不具有小数部分)必须删除数字的小数部分,即它变成了一个不同的数字。这不安全,因此只能显式


要将一种类型的数字显式转换为另一种数字,请使用强制转换。这是数字前面的括号,其中包含您要将其转换为的数字类型。

float

请注意,浮点数的小数部分已被删除。就好像它已向下舍入为零。如果要将浮点数舍入为最接近的整数,请使用Math.Round method

float someFloat = 42.7f;
int someInt = (int)someFloat;               // 42

答案 1 :(得分:3)

试试这个:

int numInt = (int)Math.Ceiling(numFloat);

msdn documentation

顺便说一下,您可能需要Math.Round()Math.Floor()

示例:

float numFloat = 1.5f;
int testCeiling = (int)Math.Ceiling(numFloat);
int testFloor = (int)Math.Floor(numFloat);
int testRound = (int)Math.Round(numFloat);

Console.WriteLine("testCeiling = {0}", testCeiling.ToString());
Console.WriteLine("testFloor = {0}", testFloor.ToString());
Console.WriteLine("testRound= {0}", testRound.ToString());

输出:

testCeiling = 2
testFloor = 1
testRound= 2