objective-c – NSDecimalNumber的小数部分

栏目: Objective-C · 发布时间: 1年前

来源: codeday.me

内容简介:翻译自:https://stackoverflow.com/questions/5355755/fractional-part-of-nsdecimalnumber

本文转载自:https://codeday.me/bug/20190113/514186.html,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。

我正在使用NSDecimalNumber存储货币值.我正在尝试编写一个名为“cents”的方法,该方法将数字的小数部分作为NSString返回,如果数字为<

10.所以基本上

NSDecimalNumber *n = [[NSDecimalNumber alloc] initWithString:@"1234.55"];

NSString *s = [object cents:n];

我正在尝试制作一个方法,它将返回01,02等……最多99个字符串.我似乎无法弄清楚如何将尾数作为这种格式的字符串返回.我觉得我错过了一种方便的方法,但我再次查看了文档,并没有看到任何东西向我跳出来.

更新:这是一个相对陈旧的答案,但看起来人们仍在寻找它.我想更新这个以获得正确性 – 我最初回答了这个问题,因为我只是为了演示如何从双精度中提取特定的小数位,但我并不主张这是一种表示货币信息的方法.

切勿使用浮点数来表示货币信息.一旦你开始处理十进制数字(就像你用美元一样),你可以在你的代码中引入可能的浮点错误.计算机无法准确表示所有十进制值(例如,1 / 100.0,1美分,在我的机器上表示为0.01000000000000000020816681711721685132943093776702880859375).根据您计划代表的货币,以基本金额(在本例中为美分)存储数量总是更正确.

如果以积分美分存储您的美元值,您将永远不会遇到大多数操作的浮点错误,并且很容易将美分转换为美元进行格式化.例如,如果您需要应用税金,或者将您的美分值乘以一倍,那么为了得到一个双倍值,应用 banker’s rounding 来舍入到最接近的分数,然后转换回整数.

如果你试图支持多种不同的货币,它会变得更复杂,但有办法解决这个问题.

tl; dr不要使用浮点数来表示货币,你会更快乐,更正确. NSDecimalNumber能够准确(并且精确地)表示十进制值,但是一旦转换为double / float,就会冒着引入浮点错误的风险.

这可以相对容易地完成:

>获取十进制数的double值(假设数字不是太大而不能存储在double中,这将起作用).

>在单独的变量中,将double转换为整数.

>将两个数字乘以100以说明精度损失(实际上,转换为美分)并从原始数字中减去美元以获得分数.

>以字符串形式返回.

(这是使用所有十进制数的通用公式 – 使用NSDecimalNumber只需要一些胶水代码即可使其工作).

在实践中,它看起来像这样(在NSDecimalNumber类别中):

- (NSString *)cents {
    double value = [self doubleValue];
    unsigned dollars = (unsigned)value;
    unsigned cents = (value * 100) - (dollars * 100);

    return [NSString stringWithFormat:@"%02u", cents];
}

翻译自:https://stackoverflow.com/questions/5355755/fractional-part-of-nsdecimalnumber


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

关注码农网公众号

关注我们,获取更多IT资讯^_^


为你推荐:

相关软件推荐:

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Objective-C编程

Objective-C编程

[美] Aaron Hillegass / 夏伟频、李骏 / 华中科技大学出版社 / 2012-9-25 / 58.00元

《Objective-C编程》讲述Objective-C编程语言和基本的iOS/Mac开发知识。作者首先从基本的编程概念讲起(变量、条件语句、循环结构等),接着用浅显易懂的语言讲解Objective-C和Foundation的知识,包括Objective-C的基本语法、 Foundation常用类 、内存管理、常用设计模式等,最后手把手教读者编写完整的、基于事件驱动的iOS/Mac应用。作者还穿插......一起来看看 《Objective-C编程》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具