2014-02-20 165 views
-4

因此,我有一个项目正在进行中。这是我唯一的错误:将Float转换为Int

不能将类型'float'隐式转换为'int'。

我的理解在某种程度上意味着什么。我只需要帮助将我的float转换为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; 
+1

你可以展示一些你迄今为止所做的代码吗? – Edper

+2

@ user3325320 .. int _value = Convert.ToInt32(key); –

+0

你想转一圈吗?或者你只是想截断?例如'1.8'四舍五入为'2',但截断为'1'。 –

回答

1

试试这个:

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 
3

首先,有整数浮点号码。整数是总是整数,如0,1,-32,421337。另一方面,浮点数可以有有小数部分:0,1,-32.1,42.7123.456788都是有效的浮点数。

当整数(int)和浮点(float)数之间的转换,你可以这样做:

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

但你不能做到这一点:

float someFloat = 42.7f; 
int someInt = someFloat; // ? 

的原因第一次转换是可能的,那就是将整数(int)转换为浮点数(float不是更改数字。这是一个安全的转换,因此可以隐式执行

不允许进行第二次转换的原因是将浮点数(可能有小数部分)转换为整数(从未有小数部分)必须删除小数部分,即它变成了不同的数字。这是不安全的,因此只能做明确


一种类型的数显式转换为另一种,您使用。这是您要将其转换为数字类型的数字之前的括号。

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

请注意,浮点数的小数部分被丢弃。就好像它已经被调低到零。如果要将浮点数整数到最接近的整数,请使用Math.Round method

float someFloat = 42.7f; 
int someInt = (int)Math.Round(someFloat); // 43