Ios NSNumberFormatter使用十进制分隔符,但不使用逗号分隔符

Ios NSNumberFormatter使用十进制分隔符,但不使用逗号分隔符,ios,rounding,nsnumberformatter,decimal,Ios,Rounding,Nsnumberformatter,Decimal,我已经为此工作了两天了。是时候咨询stackoverflow了 我有一个iOS用户设置,允许选择十进制和分组分隔符。当分隔符是小数点时,它可以完美地工作,但当设置为十进制逗号时,所有数字条目都会自动四舍五入到最接近的整数,任何计算都会失去精度 该计划是: //Use formatter to set decimal style for output NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatte

我已经为此工作了两天了。是时候咨询stackoverflow了

我有一个iOS用户设置,允许选择十进制和分组分隔符。当分隔符是小数点时,它可以完美地工作,但当设置为十进制逗号时,所有数字条目都会自动四舍五入到最接近的整数,任何计算都会失去精度

该计划是:

//Use formatter to set decimal style for output
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumFractionDigits:1];
[formatter setMaximumFractionDigits:5];

//Set number format from preferences
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *numberFormat = [userDefaults stringForKey:kNumberFormat];
if([numberFormat isEqualToString:@"Decimal Point"])
    {
    [formatter setDecimalSeparator:@"."];
    [formatter setGroupingSeparator:@","];
    }

    else
    {
    [formatter setDecimalSeparator:@","];
    [formatter setGroupingSeparator:@"."];
    }

NSNumber *number = [NSNumber numberWithDouble: result];
NSString* formattedResult = [formatter stringFromNumber:number];
[display_ setText: [NSString stringWithFormat:@"%@", formattedResult]];
[formatter release];
十进制分隔符模式下5.5+5.5=11.0

但是,在逗号分隔符模式下,5.5在显示中立即被截断为5.0,5.5+5.5=10


不是我想要的

我能自己解决这个问题。数字格式化程序运行正常。为了让analyzer类正常工作,我必须发送一个不能包含逗号-小数分隔符的double。但为了使显示器在逗号分隔符模式下看起来正确,我必须以所需格式将字符串发送到显示器(例如2.500,05),然后根据需要使用小数点和逗号重新格式化字符串,然后将该字符串作为双精度(例如2500.05)发送到分析仪。有点棘手,因为我基本上是在交换小数点和逗号。也许有一种更巧妙的方法可以做到这一点,但这种方法奏效了:

NSString *numberFormat = [userDefaults stringForKey:kNumberFormat];

//if the string has been entered using a decimal comma, do this
if([numberFormat isEqualToString:@"Decimal Comma"])
{

 NSString *displayString = [display_ text];
 NSString *newStringValue = [displayString 
           stringByReplacingOccurrencesOfString:@"," withString:@"x"];
 newStringValue = [newStringValue 
           stringByReplacingOccurrencesOfString:@"." withString:@","];
 newStringValue = [newStringValue 
           stringByReplacingOccurrencesOfString:@"x" withString:@"."];
 [display_ setText:displayString];
 [[self analyzer_] setFirstOperand:[newStringValue doubleValue]];
}

//there is no problem if the decimal separator is a decimal point, so 
//just send it as is
if([numberFormat isEqualToString:@"Decimal Point"])

{   
 [[self analyzer_] setOperand:[[display_ text] doubleValue]];   
} 

我能自己解决这个问题。数字格式化程序运行正常。为了让analyzer类正常工作,我必须发送一个不能包含逗号-小数分隔符的double。但为了使显示器在逗号分隔符模式下看起来正确,我必须以所需格式将字符串发送到显示器(例如2.500,05),然后根据需要使用小数点和逗号重新格式化字符串,然后将该字符串作为双精度(例如2500.05)发送到分析仪。有点棘手,因为我基本上是在交换小数点和逗号。也许有一种更巧妙的方法可以做到这一点,但这种方法奏效了:

NSString *numberFormat = [userDefaults stringForKey:kNumberFormat];

//if the string has been entered using a decimal comma, do this
if([numberFormat isEqualToString:@"Decimal Comma"])
{

 NSString *displayString = [display_ text];
 NSString *newStringValue = [displayString 
           stringByReplacingOccurrencesOfString:@"," withString:@"x"];
 newStringValue = [newStringValue 
           stringByReplacingOccurrencesOfString:@"." withString:@","];
 newStringValue = [newStringValue 
           stringByReplacingOccurrencesOfString:@"x" withString:@"."];
 [display_ setText:displayString];
 [[self analyzer_] setFirstOperand:[newStringValue doubleValue]];
}

//there is no problem if the decimal separator is a decimal point, so 
//just send it as is
if([numberFormat isEqualToString:@"Decimal Point"])

{   
 [[self analyzer_] setOperand:[[display_ text] doubleValue]];   
} 

不理解逗号分隔符模式。您在哪里以及如何需要它?举个小例子。我们会尽快解决的。谢谢。事实上,我发现这个问题是由于在我的数字输入字符串中使用了“,”符号引起的,然后将其转换为一个双精度字符,发送给analyzer类进行处理(这是一种计算器)。我有一个允许在点(“.”)或逗号(“,”)之间选择小数分隔符的设置。当分隔符输入按钮设置为“,”时会出现问题。如果字符串中有“,”符号,则当使用[[self analyzer_u2;]SetFirstOperator:[[display_2;text]doubleValue]]发送时,分析器将不接受该字符串作为双精度字符串。所以我正在想办法让它发挥作用。还有一件事。我知道有一些本地化方法可以设置十进制和分组符号分隔符,但我还没有弄清楚如何让它们工作。我想这样做,这样在数字格式为3.324084而不是3324.084的地方,它看起来很自然。如果我将分隔符按钮标题保留为“.”在逗号模式下,它可以工作,除非用户必须在输入时看到不正确的十进制格式,直到按下操作按钮,然后display立即将其重新格式化以使用逗号形式,并正确完成计算。功能正常,但不雅观。不理解逗号分隔符模式。您在哪里以及如何需要它?举个小例子。我们会尽快解决的。谢谢。事实上,我发现这个问题是由于在我的数字输入字符串中使用了“,”符号引起的,然后将其转换为一个双精度字符,发送给analyzer类进行处理(这是一种计算器)。我有一个允许在点(“.”)或逗号(“,”)之间选择小数分隔符的设置。当分隔符输入按钮设置为“,”时会出现问题。如果字符串中有“,”符号,则当使用[[self analyzer_u2;]SetFirstOperator:[[display_2;text]doubleValue]]发送时,分析器将不接受该字符串作为双精度字符串。所以我正在想办法让它发挥作用。还有一件事。我知道有一些本地化方法可以设置十进制和分组符号分隔符,但我还没有弄清楚如何让它们工作。我想这样做,这样在数字格式为3.324084而不是3324.084的地方,它看起来很自然。如果我将分隔符按钮标题保留为“.”在逗号模式下,它可以工作,除非用户必须在输入时看到不正确的十进制格式,直到按下操作按钮,然后display立即将其重新格式化以使用逗号形式,并正确完成计算。实用,但不雅观。