标签: nsdecimalnumber

将NSNumber转换为NSDecimalNumber

我意识到NSDecimalNumber继承自NSNumber.

但是,我正在努力弄清楚如何从NSNumber初始化NSDecimalNumber或如何将NSNumber转换为NSDecimalNumber.

我试过了

NSDecimalNumber* d = [aNumber copy];
Run Code Online (Sandbox Code Playgroud)

aNumberNSNumber对象在哪里无济于事.

我错过了什么吗?

谢谢.

objective-c init nsnumber nsdecimalnumber

39
推荐指数
2
解决办法
2万
查看次数

Swift 3:十进制到Int

我尝试使用以下代码将Decimal转换为Int:

Int(pow(Decimal(size), 2) - 1) 
Run Code Online (Sandbox Code Playgroud)

但我得到:

.swift:254:43: Cannot invoke initializer for type 'Int' with an argument list of type '(Decimal)' 
Run Code Online (Sandbox Code Playgroud)

在这里我知道pow正在返回a Decimal但似乎Int没有构造函数和成员函数可以转换DecimalInt.
如何在Swift 3中将Decimal转换为Int?

nsdecimalnumber ios swift swift3

25
推荐指数
4
解决办法
2万
查看次数

如何添加NSDecimalNumbers?

好吧,这可能是当天的愚蠢问题,但假设我有一个班级:

NSDecimalNumber *numOne   = [NSDecimalNumber numberWithFloat:1.0];
NSDecimalNumber *numTwo   = [NSDecimalNumber numberWithFloat:2.0];
NSDecimalNumber *numThree = [NSDecimalNumber numberWithFloat:3.0];
Run Code Online (Sandbox Code Playgroud)

为什么我不能有一个添加这些数字的函数:

- (NSDecimalNumber *)addThem {
    return (self.numOne + self.numTwo + self.numThree);
}
Run Code Online (Sandbox Code Playgroud)

我为一个白痴提前道歉,谢谢!

iphone objective-c nsdecimalnumber

21
推荐指数
4
解决办法
1万
查看次数

将NSDecimalNumber转换为NSString

我正在从一个看起来像这样的对象中检索一个键:

po obj
{
  TypeID = 3;
  TypeName = Asset;
}
Run Code Online (Sandbox Code Playgroud)

正在检索键值,如下所示:

NSString *typeId = (NSString*)[obj objectForKey:@"TypeID"];
Run Code Online (Sandbox Code Playgroud)

它不是typeId是NSString,而是NSDecimalNumber.这是为什么?

如何将其转换为NSString?

cocoa-touch objective-c nsstring nsdecimalnumber ios

16
推荐指数
1
解决办法
2万
查看次数

比较NSDecimalNumber的不同方法

例如,对于原始,我会这样做

if ( (x >= 6000) && (x <= 20000) )
    // do something here 
Run Code Online (Sandbox Code Playgroud)

并且使用NSDecimalNumber,这就是我所拥有的

if ( (([x compare:[NSNumber numberWithInt:6000]] == NSOrderedSame) || 
        ([x compare:[NSNumber numberWithInt:6000]] == NSOrderedDescending))
    && (([x compare:[NSNumber numberWithInt:20000]] == NSOrderedSame) || 
        ([x compare:[NSNumber numberWithInt:6000]] == NSOrderedAscending)) )
{
    // do something here
}
Run Code Online (Sandbox Code Playgroud)

这种比较还有其他方法(更简单,更优雅)吗?如果我将值转换为原始,我使用什么原语?我不想使用CGFloat,float或double,因为我在这里处理货币.或者如果我将它们转换为上面提到的那些,有人可以验证/解释精度吗?

objective-c nsdecimalnumber ios

15
推荐指数
2
解决办法
2万
查看次数

如何在swift中舍入NSDecimalNumber?

我找不到任何资源,我一直在尝试各种各样的东西,但没有任何作用.

根据Apple的文档,你可以像这样围绕NSDecimalNumber:

NSDecimalNumber.decimalNumberByRoundingAccordingToBehavior(<#behavior: NSDecimalNumberBehaviors?#>)
Run Code Online (Sandbox Code Playgroud)

它接受一个NSDecimalNumberBehavior,我不确定如何操作,因为它(1)不能启动到变量并且它的属性已更改,并且(2)根据文档的roundingMode()方法不接受任何参数,但Xcode填写"自我"的参数空间.

我完全迷失了.回到基本问题; 如何在swift中舍入NSDecimalNumber?

提前致谢

xcode nsdecimalnumber swift

11
推荐指数
2
解决办法
5317
查看次数

将NSDecimalNumber置为负数

我正在寻找一种NSDecimalNumber通过乘以负转的方法-1.

/* decNumber is the one I would like to turn negative */
NSDecimalNumber *decNumber = [values objectAtIndex:billIndex];

NSDecimalNumber *minusOne = [[NSDecimalNumber alloc] initWithInt: -1];
finalValue = [[NSDecimalNumber alloc] initWithDecimal: [[decNumber decimalNumberByMultiplyingBy: minusOne] decimalValue]];
Run Code Online (Sandbox Code Playgroud)

这有效,但感觉就像这么简单的逻辑太多了.你能想到更好的方法吗?

iphone objective-c nsdecimalnumber

10
推荐指数
1
解决办法
2598
查看次数

NSDecimalNumber decimalNumberWithString:忽略当前的语言环境

根据文档,[NSDecimalNumber decimalNumberWithString:]应使用locale小数分隔符:

NSDecimalSeparator是句点(例如,在美国使用)还是逗号(例如在法国使用)取决于默认语言环境.

但是当我尝试它时,这段代码:

NSLog(@"%@", [NSDecimalNumber decimalNumberWithString:@"100,1"]);
NSLog(@"%@", [NSDecimalNumber decimalNumberWithString:@"100,1" locale:NSLocale.currentLocale]);
Run Code Online (Sandbox Code Playgroud)

给...

100
100.1
Run Code Online (Sandbox Code Playgroud)

...作为iOS 5和iOS 6的输出.我尝试使用瑞典语和法语作为区域设置,因为这两个国家都使用逗号(,)作为小数分隔符.

输出应该不一样吗?

(我知道我可以使用[NSDecimalNumber decimalNumberWithString:locale:]来强制行为,所以这个问题不是关于找到替代方案,只是如果这是一个错误或我做错了什么)

cocoa-touch objective-c nsdecimalnumber ios

10
推荐指数
1
解决办法
4278
查看次数

{NSDecimalNumber integerValue}在iOS8中表现异常

好的团队,这很奇怪.[NSDecimalNumber integerValue]表现得很奇怪.

我坐在一个断点处,试图弄清楚为什么我的应用程序的某些部分在iOS8中被破坏了,而我正在查看一个名为"timeSeconds"的变量.在Xcode变量视图中看起来像这样:

_timeSeconds    (NSDecimalNumber *) 344.514533996581994496
Run Code Online (Sandbox Code Playgroud)

但是当我在调试器中查询它时,我看到了这个:

(lldb) p [self.timeSeconds doubleValue]
(double) $14 = 344.51453399658192
(lldb) p [self.timeSeconds intValue]
(int) $15 = 344
(lldb) p [self.timeSeconds integerValue]
(NSInteger) $16 = -5
(lldb) p (NSInteger)[self.timeSeconds intValue]
(NSInteger) $17 = 344
Run Code Online (Sandbox Code Playgroud)

看到"-5"?在我提交雷达之前,你们中的任何人都可以复制或解释这些吗?

这是SSCCE:

NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"344.514533996581994496"];
NSLog(@"%@", n); // 344.514533996581994496
NSLog(@"%ld", (long)[n intValue]); // 344
NSLog(@"%ld", (long)[n integerValue]); // -5
NSLog(@"%ld", (long)[n unsignedIntegerValue]); // 12
Run Code Online (Sandbox Code Playgroud)

提前致谢!

马修

objective-c nsdecimalnumber ios8

10
推荐指数
1
解决办法
626
查看次数

将String转换为NSDecimalNumber

我尝试将String转换为NSDecimalNumber,这是我的代码:

class func stringToDecimal (dataToDecimal: String) -> NSDecimalNumber {

    let dataToDecimal = dataToDecimal.stringByReplacingOccurrencesOfString(",", withString: ".")
    print(dataToDecimal)
    let  decimalReturn = NSDecimalNumber(string: dataToDecimal)
    print(decimalReturn)

    if decimalReturn == NSDecimalNumber.notANumber(){
        return 0.00
    }
    return decimalReturn
}
Run Code Online (Sandbox Code Playgroud)

首先,我认为可能是错误的,但即便如此.它不起作用.第一次打印(转换前)显示例如80,00,但打印(decimalReturn)仅显示80

if行只是检查结果是否不是数字.

string nsdecimalnumber ios swift

10
推荐指数
1
解决办法
7408
查看次数