如何比较十进制值
Posted
技术标签:
【中文标题】如何比较十进制值【英文标题】:How to compare decimal values 【发布时间】:2013-11-19 07:26:51 【问题描述】:我在比较两个十进制值时遇到问题。 我有一个文本字段,其中包含 0.123456 之类的数字和包含 0.000001 的 NSNumber。 两者的最大小数位数为 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;
但我有一个问题,有时 0.123456 = 0,123455999... 或 0,123456000000...01 例如 @0.000001 doubleValue
我如何与 NSNumber 与小数部分进行比较,以确保它是正确的?
提前致谢。
【问题讨论】:
【参考方案1】:为四舍五入创建小数扩展
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
【讨论】:
【参考方案2】:如果您担心小数部分,您可以四舍五入您的值... 像这样的:
-(double)RoundNormal:(double) value :(int) digit
value = round(value * pow(10, digit));
return value / pow(10, digit);
然后比较一下。
【讨论】:
【参考方案3】:如果你不想太麻烦,你可以简单地进行测试
if(abs(x-y) < 0.0001)
【讨论】:
【参考方案4】:这应该解决它:
NSNumberFormatter *decimalFormatter = [[NSNumberFormatter alloc] init];
[decimalFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
[decimalFormatter setMaximumFractionDigits:6];
[decimalFormatter setMinimumFractionDigits:6];
[formatter setRoundingMode:NSNumberFormatterRoundHalfUp];
[formatter setRoundingIncrement:[NSNumber numberWithDouble:0.000001]]
【讨论】:
setMinimumFractionDigits:6
。但是可能有 1 或 3,或 0。这段代码可以吗?【参考方案5】:
使用 NSDecimalNumber 类 - 请参阅指南数字和值编程主题
【讨论】:
【参考方案6】:这是 NSDecimal 数字在 ios 中的比较方式:
if ( [x compare:y] == NSOrderedSame )
// If x is equal to y then your code here..
if([x compare:y] == NSOrderedDescending)
// If x is descendant to y then your code here..
if([x compare:y] == NSOrderedAscending)
// If x is ascendant to y then your code here..
【讨论】:
以上是关于如何比较十进制值的主要内容,如果未能解决你的问题,请参考以下文章
如何编写CompareTo方法以比较二进制搜索算法中的字符串值