我知道由于舍入错误,浮点数不适合存储货币值.有没有一种标准的方式来代表C++中的钱?
我查看过boost库并没有发现它.在java中,似乎BigInteger就是这样,但我找不到C++中的等价物.我可以写自己的钱类,但如果有测试的话,我宁愿不这样做.
是否可以扩展NSDecimalNumber到符合Encodable & Decodable协议?
我正在尝试做一些我认为相当简单的事情:让用户输入一个美元金额,将该金额存储在NSNumber(NSDecimalNumber?)中,然后在稍后的某个时间再次显示格式化为货币的金额.
我的麻烦不在于setNumberStyle:NSNumberFormatterCurrencyStyle并将浮动显示为货币.问题更多的是所述numberFormatter如何与这个UITextField一起工作.我可以找到一些例子.这个帖子来自十一月,这个给我一些想法,但给我留下了更多的问题.
我正在使用UIKeyboardTypeNumberPad键盘并了解我应该在显示的字段中显示$ 0.00(或任何本地货币格式)然后当用户输入数字以移动小数位时:
然后[numberFormatter numberFromString:textField.text]应该给我一个值,我可以存储在我的NSNumber变量中.
可悲的是,我还在苦苦挣扎:这真的是最好/最简单的方式吗?如果是这样,也许有人可以帮助我实施?我觉得UITextField可能需要一个代理响应每个按键,但不知道什么,在哪里以及如何实现它?!任何示例代码?我非常感谢!我搜索过高低......
Edit1:所以我正在研究NSFormatter的stringForObjectValue:以及我能找到的最接近benzado建议的东西:UITextViewTextDidChangeNotification.很难在其中任何一个上找到示例代码......所以如果你知道在哪里看,请告诉我?
我的目标很简单,我有一个存储本地化货币值的文本字段(例如$ 1,000.00),我需要从文本字段中取回该值作为浮点数来对文本字段执行某些测试.
代码非常简单,首先我将NSNumber格式化为localizedString,如下所示:
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
textfield.text = [formatter stringFromNumber:number];
Run Code Online (Sandbox Code Playgroud)
一切正常,但我做相反的事情从这个本地化的字符串得到doubleValue:
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
formatter.numberStyle = NSNumberFormatterCurrencyStyle; //also tested with NSNumberFormatterDecimalStyle
double d = [formatter numberFromString:textfield.text].doubleValue;
Run Code Online (Sandbox Code Playgroud)
问题是格式化程序只返回我的字符串的整数值而不是小数,更糟糕的是,如果它是加拿大本地化字符串(20 000,00 $),它只返回20.
我一直在寻找一段时间,但却找不到任何关于这种行为的信息.解决方法当然是在将NSNumber格式化之前存储到文本字段然后测试这个nsnumber,但我真的不觉得它很漂亮.
currency ×2
swift ×2
c++ ×1
cocoa ×1
cocoa-touch ×1
ios ×1
nsstring ×1
objective-c ×1
swift4 ×1
uitextfield ×1