Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将字符串转换为十进制_Objective C - Fatal编程技术网

Objective c 将字符串转换为十进制

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

我需要更改下面的代码,使“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 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
}