当我开始编写我的第一个应用程序时,我使用了NSNumber来获取金钱价值而不必考虑两次 然后我想也许c类型足以处理我的价值观.然而,我被推荐在iPhone SDK论坛中使用NSDecimalNumber,因为它具有出色的舍入功能.
不是气质的数学家,我认为尾数/指数范式可能是过度的; 仍然,googlin',我意识到大多数关于可可货币/货币的谈判都被提到了NSDecimalNumber.
请注意,我正在处理的应用程序将进行国际化,因此以美分计算金额的选项并不可行,因为货币结构在很大程度上取决于所使用的区域设置.
我90%肯定我需要使用NSDecimalNumber,但因为我在网上找不到明确的答案(类似于:"如果你处理钱,请使用NSDecimalNumber!")我想我会问这里.也许答案对大多数人来说是显而易见的,但我想在开始对我的应用程序进行大规模重新分解之前确定.
说服我 :)
有没有办法从应用程序文化设置动态获取当前信息?基本上,如果用户已将文化设置为美国,我想知道货币是美元,或者如果他们将其设置为英国我想要英镑等...等等.
这样我就可以在付款时将此信息发送给PayPal
我在文本框中输入一个字符串值,显示需要格式化的余额,如下所示:
###,###,###,##0.00
Run Code Online (Sandbox Code Playgroud)
我可以使用value.ToString("c"),但这会将货币符号放在它前面.
知道如何在输入文本框之前操作字符串以实现上述格式化吗?
我试过这个,没有成功:
String.Format("###,###,###,##0.00", currentBalance);
Run Code Online (Sandbox Code Playgroud)
非常感谢,
我正在处理货币,我想将数字向下舍入到小数点后2位.即使数字是500.0,我希望它是500.00才能保持一致.当我执行"500.00".to_d时,它将其转换为500.0.
什么是改变这种行为的好方法?我也使用这种方法向下舍入到2位数,并确保它总是有2位小数.
def self.round_down(x, n=2)
s = x.to_s
l = s.index('.') ? s.index('.') + 1 + n : s.length
s = s[0, l]
s = s.index('.') ? s.length - (s.index('.') + 1) == 1 ? s << '0' : s : s << '.00'
s.to_f
end
Run Code Online (Sandbox Code Playgroud) 首先,我尝试过这篇文章(其中包括):Python中的货币格式.它对我的变量没有影响.我最好的猜测是因为我使用的是Python 3,而且是Python 2的代码.(除非我忽略了一些东西,因为我是Python的新手).
我想将一个浮点数(如1234.5)转换为String,例如"$ 1,234.50".我该怎么做呢?
为了以防万一,这里是我编译的代码,但不影响我的变量:
money = float(1234.5)
locale.setlocale(locale.LC_ALL, '')
locale.currency(money, grouping=True)
Run Code Online (Sandbox Code Playgroud)
也不成功:
money = float(1234.5)
print(money) #output is 1234.5
'${:,.2f}'.format(money)
print(money) #output is 1234.5
Run Code Online (Sandbox Code Playgroud) 快速搜索货币正则表达式会带来很多结果.
我选择其中之一的问题是,如果不测试所有边缘情况,正则表达式很难验证.我可以花很多时间在这上面,因为我相信其他数百名开发人员已经做过了.
有没有人有美国货币的正则表达式已经过彻底测试?
我唯一的要求是匹配的字符串是US Currency并解析为System.Decimal:
[ws][sign][digits,]digits[.fractional-digits][ws] Elements in square brackets ([ and ]) are optional. The following table describes each element. ELEMENT DESCRIPTION ws Optional white space. sign An optional sign. digits A sequence of digits ranging from 0 to 9. , A culture-specific thousands separator symbol. . A culture-specific decimal point symbol. fractional-digits A sequence of digits ranging from 0 to 9.
我正在寻找一种方法来自动从一个银行帐户转移到另一个银行帐户,而最终用户不必登录到类似于PayPal或亚马逊付款的东西来完成流程(通过将他们的在线余额转移到他们的银行帐户).我在网上看了一下,发现一些供应商似乎能够做到这一点,但API文档并没有让我对此感到确定.
任何人都可以推荐他们曾经做过这样的服务吗?显然我正在寻找一个基于Web的API.完整的流程是一个中间人网站,收集付款(这是容易的部分),然后支付(少收费)到银行帐户.
亚马逊支付会很棒(允许三方/市场交易); 但是,我们正在寻找直接面向最终用户银行账户的东西.
(我知道这不是严格的代码,但我认为可能有人做了类似的事情.)
是否有图书馆格式化一个国家的正确货币代表?
英国示例 - £127.54荷兰€127,54-美国$ 127.54
等等..
有些事情要考虑,
货币符号
货币符号展示位置 - 可以是数字之前或之后的位置.
负数量显示
在C#中,有可能从3个字符的货币代码中获得货币符号,例如"£",在这种情况下是"GBP"吗?
这可能在SQL Server或C#中吗?
我们知道使用double货币是容易出错的,不推荐使用.但是,我还没有看到一个现实的例子,BigDecimal虽然double失败了,但不能通过一些舍入来简单地修复.
注意琐碎的问题
double total = 0.0;
for (int i = 0; i < 10; i++) total += 0.1;
for (int i = 0; i < 10; i++) total -= 0.1;
assertTrue(total == 0.0);
Run Code Online (Sandbox Code Playgroud)
不计算,因为它们通过舍入(在这个例子中从0到16的小数位的任何东西)都可以解决.
涉及总结大值计算可能需要一些中间圆棒,但由于流通总货币之中USD 1e12,爪哇double(即标准IEEE双精度其15个十进制数字)仍然是足够美分事件.
涉及分工的计算通常是不精确的,即使是BigDecimal.我可以构造一个不能用doubles 执行的计算,但可以BigDecimal使用100的标度执行,但它不是你在现实中可以遇到的东西.
我没有声称这样一个现实的例子不存在,只是我还没有看到它.
我也肯定同意,使用double更容易出错.
我正在寻找的是如下方法(根据Roland Illig的回答)
/**
* Given an input which has three decimal …Run Code Online (Sandbox Code Playgroud) currency ×10
c# ×4
.net ×2
api ×1
asp.net ×1
biginteger ×1
cocoa ×1
cocoa-touch ×1
cultureinfo ×1
decimal ×1
e-commerce ×1
format ×1
java ×1
math ×1
payment ×1
python ×1
python-3.x ×1
regex ×1
rounding ×1
ruby ×1
string ×1