我需要更改下面的代码,使“intAmount”成为我的uitextfield中的小数或整数(即一个人可以输入.10或1)。最后一行“myProduct”必须是十进制而不是整数,并以“18.00”格式返回产品。有人可以帮助我改变我的代码snippit吗?
//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 :(得分:3)
使用doubleValue
代替intValue
从文本字段中获取正确的小数。将其放在double
类型的变量中,而不是NSInteger
。然后在打印时使用格式%.2g
,它看起来就像你想要的那样。
答案 1 :(得分:2)
如果您需要明确跟踪小数值,可以使用NSDecimalNumber
。但是,如果你所做的只是这一次操作,卡尔的解决方案很可能就足够了。
答案 2 :(得分:0)
如果你有一个实数(非整数)的字符串表示,你可以使用NSScanner
对象将其扫描到double
或float
,甚至是{ {1}}结构如果这是你的真实意图(NSDecimal结构和NSDecimalNumber类对于包含可以用十进制精确表示的数字有用)。
NSDecimal
使用本地化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
}
对象的好处是该数字是根据用户的语言环境解释的,因为“1.000”可能意味着一千或一个,具体取决于您的语言环境。