Objective c 将字符串转换为十进制
我需要更改下面的代码,使“intAmount”在我的uitextfield中成为十进制或整数(即,一个人可以输入.10或1)。最后一行“myProduct”必须是十进制而不是整数,并以“18.00”格式返回产品。有人能帮我修改代码吗Objective c 将字符串转换为十进制,objective-c,Objective C,我需要更改下面的代码,使“intAmount”在我的uitextfield中成为十进制或整数(即,一个人可以输入.10或1)。最后一行“myProduct”必须是十进制而不是整数,并以“18.00”格式返回产品。有人能帮我修改代码吗 //amt has to be converted into a decimal value its a NSString now NSInteger intAmount = [amt intValue]; //where total gets updated in
//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;
使用
doubleValue
而不是intValue
从文本字段中获取正确的小数。将其放入类型为double
的变量中,而不是NSInteger
。然后在打印时使用格式%.2g
,它看起来就像您想要的那样。使用双值
而不是intValue
从文本字段中获取正确的小数。将其放入类型为double
的变量中,而不是NSInteger
。然后在打印时使用格式%.2g
,它看起来就像您想要的那样。如果需要明确跟踪十进制值,可以使用NSDecimalNumber
。但是,如果您只做这一个操作,卡尔的解决方案很可能就足够了。如果您需要显式跟踪十进制值,可以使用NSDecimalNumber
。然而,如果你只做这一个操作,卡尔的解决方案很可能就足够了。如果你有实数(非整数)的字符串表示,你可以使用一个对象把它扫描成一个双精度或浮点,甚至是一个NSDecimal
结构,如果这是你真正的意图的话(NSDecimal结构和NSDecimalNumber类对于包含可以精确表示为十进制的数字非常有用)
使用本地化的NSScanner
对象的好处在于,数字是根据用户的区域设置来解释的,因为“1.000”可能意味着1000,也可能仅仅意味着一,具体取决于您的区域设置。如果您有实数(非整数)的字符串表示形式,您可以使用对象将其扫描为double
或float
,甚至是NSDecimal
结构,如果这是您的真实意图(NSDecimal struct和NSDecimalNumber类对于包含可以精确表示为十进制的数字非常有用)
使用本地化的NSScanner
对象的好处是,数字是根据用户的区域设置来解释的,因为“1.000”可以是一千,也可以是一,这取决于您所在的地区。您不是指“十进制”,而是指“非整数”或“分数”。十进制是一个基数。十进制也是一个类…比fl;oat或double更好-至少在C中是这样。我会将总计和intInteger
都保留为“十进制”,但在赋值之前执行强制转换。然后,您只需要找到一种将字符串转换为“十进制”的方法。尽管我会为您简化一点工作流程。@Hamish Grubijan:这个问题显然是关于Cocoa/Objective-C的,所以没有“十进制”这样的类NSDecimalNumber是类,不是基本类型,你不能这样使用它。NSDecimalNumber只是NSDecimal结构的包装,不是吗?你不是说“decimal”而是指“非整数”或“分数”。decimal是一个基。decimal也是一个类……比fl;oat或double更好——至少在C#中是这样。我会保留total
和intInteger
作为“decimal”,但在分配任务之前执行强制转换。然后您只需要找到一种方法将字符串转换为“decimal”。尽管我会为您简化一点工作流程。@Hamish Grubijan:这个问题显然是关于Cocoa/Objective-C的,所以没有“decimal”这样的类NSDecimalNumber是类,不是基元类型,不能这样使用。NSDecimalNumber只是NSDecimalNumber结构的包装,不是吗?必须使用double而不是NSDecimalNumber。尽管如此%.2g不会将零放入其中(即,如果总数为3.60,则读数为3.6,如果总数为36,则读数为36.00)您必须使用double而不是NSDecimalNumber。尽管如此%.2g不会将零放入(即,如果总数为3.60,则读数为3.6;如果总数为36,则读数为36.00)
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
}