2010-07-07 103 views
0

我需要更改下面的代码,以便在我的uitextfield中使“intAmount”成为小数或整数(即一个人可以输入.10或1)。例如,最后一行“myProduct”必须是小数而不是整数,并返回格式为“18.00”的产品。有人可以帮助某人帮我改变我的代码snippit吗?将NSString转换为小数

//amt has to be converted into a decimal value its a NSString now 
NSInteger intAmount = [amt intValue]; 
//where total gets updated in the code with some whole (integer) value 
NSInteger total=0; 
//Change myProduct to a decimal with presicion of 2 (i.e. 12.65) 
NSInteger myProduct=total*intAmount; 

这不起作用

NSDecimalNumber intAmount = [amt doubleValue]; 
//Keep in mind totalCost is an NSInteger 
NSDecimalNumber total=totalCost*intAmount; 
+0

你不是指'十进制'你的意思是'非整数'或'分数'。十进制是一个基础。 – 2010-07-07 22:35:29

+0

十进制也是一类...比fl更好;燕麦或双 - 至少在C#中。我将'total'和'intInteger'保留为“decimal”,但在赋值之前执行一次转换。然后,您只需要找到一种方法将字符串转换为“十进制”。尽管我会为你简化工作流程。 http://forums.macrumors.com/showthread.php?t=900938 – 2010-07-07 22:39:19

+1

@Hamish Grubijan:这个问题很明显是关于Cocoa/Objective-C,所以没有像“decimal”这样的类。 – Chuck 2010-07-08 00:29:45

回答

3

使用doubleValue而不是intValue以获得正确的小数出你的文本字段。将它放在double类型的变量中,而不是NSInteger。然后在打印出来时使用格式%.2g,它会看起来像你想要的。

+0

卡尔你可以写代码打印格式出来 – 2010-07-08 04:09:04

+0

请看我上面修改的代码不起作用。 – 2010-07-08 04:19:40

+0

你必须使用double而不是NSDecimalNumber。尽管%.2g不会放零(即如果总数是3.60,它读取3.6,如果总数是36,它读取36,它应该读取36.00) – 2010-07-08 04:25:52

2

如果您需要明确跟踪十进制值,则可以使用NSDecimalNumber。但是,如果你只是在做这一项操作,Carl的解决方案很可能就足够了。

0

如果你有一个实数(非整数)的字符串表示,你可以使用一个NSScanner对象将其扫描到一个doublefloat,甚至是NSDecimal结构,如果这是你的真实意图(对NSDecimal结构和NSDecimalNumber类对于包含可以用十进制精确表示的数字很有用)。

NSString *amt = @"1.04"; 
NSScanner *aScanner = [NSScanner localizedScannerWithString:amt]; 
double theValue; 

if ([aScanner scanDouble:&theValue]) 
{ 
    // theValue should equal 1.04 (or thereabouts) 
} 
else 
{ 
    // the string could not be successfully interpreted 
} 

的好处是用本地化NSScanner对象是数是根据用户的语言环境来解释,因为“ 1.000 ”可能意味着无论是一千还是只有一个,根据您所在地区。