Ios 如何比较十进制值

Ios 如何比较十进制值,ios,objective-c,compare,decimal,Ios,Objective C,Compare,Decimal,我在比较两个十进制值时遇到问题。 我有一个文本字段,其中包含0.123456之类的数字,NSNumber包含0.000001。 两者的最大分数位数均为6。最小值-0 我试着这样做: NSNumberFormatter *decimalFormatter = [[NSNumberFormatter alloc] init]; [decimalFormatter setNumberStyle: NSNumberFormatterDecimalStyle]; [decimalFormatter set


我在比较两个十进制值时遇到问题。
我有一个文本字段,其中包含0.123456之类的数字,NSNumber包含0.000001。
两者的最大分数位数均为6。最小值-0
我试着这样做:

NSNumberFormatter *decimalFormatter = [[NSNumberFormatter alloc] init];
[decimalFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
[decimalFormatter setMaximumFractionDigits:6];

double sum = [[decimalFormatter numberFromString:self.summTextField.text] doubleValue];

if (self.minSum != nil) {
    if (sum < [self.minSum doubleValue]) {
        return NO;
    }
}
NSNumberFormatter*decimalFormatter=[[NSNumberFormatter alloc]init];
[decimalFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[decimalFormatter setMaximumFractionDigits:6];
double sum=[[decimalFormatter numberFromString:self.summTextField.text]doubleValue];
如果(self.minSum!=nil){
如果(总和<[self.minSum doubleValue]){
返回否;
}
}
但我有个问题,有时候0.123456=0123455999。。。或0123456000000…01 例如@0.000001 doubleValue<@0.000001 doubleValue-TRUE


如何将NSNumber与小数部分进行比较,以确保其正确无误



提前谢谢。

如果您不想太麻烦的话,您可以简单地将测试放在其他地方

if(abs(x-y) < 0.0001)
if(abs(x-y)<0.0001)
这应该可以解决这个问题:

NSNumberFormatter *decimalFormatter = [[NSNumberFormatter alloc] init];
[decimalFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
[decimalFormatter setMaximumFractionDigits:6];
[decimalFormatter setMinimumFractionDigits:6];
[formatter setRoundingMode:NSNumberFormatterRoundHalfUp];
[formatter setRoundingIncrement:[NSNumber numberWithDouble:0.000001]]

如果你担心分数部分,你可以舍入你的值。。。 大概是这样的:

-(double)RoundNormal:(double) value :(int) digit
{
    value = round(value * pow(10, digit));
    return value / pow(10, digit);
}

然后进行比较。

使用NSDecimalNumber类-请参阅数字和值编程指南主题

这是在iOS中比较NSDecimalNumber的方法:
为舍入创建小数扩展名

extension Decimal {
 func rounded(toDecimalPlace digit: Int = 2) -> Decimal {
    var initialDecimal = self
    var roundedDecimal = Decimal()
    NSDecimalRound(&roundedDecimal, &initialDecimal, digit, .plain)
    return roundedDecimal
  }
}

let value1 = Decimal(2.34999999).rounded(toDecimalPlace: 4)
let value2 = Decimal(2.34999989).rounded(toDecimalPlace: 4)
print(value1.isEqual(to: value2))

这将导致
TRUE

setMinimumFractionDigits:6
。但是可以有1、3或0。这个代码行吗?
extension Decimal {
 func rounded(toDecimalPlace digit: Int = 2) -> Decimal {
    var initialDecimal = self
    var roundedDecimal = Decimal()
    NSDecimalRound(&roundedDecimal, &initialDecimal, digit, .plain)
    return roundedDecimal
  }
}

let value1 = Decimal(2.34999999).rounded(toDecimalPlace: 4)
let value2 = Decimal(2.34999989).rounded(toDecimalPlace: 4)
print(value1.isEqual(to: value2))