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))