如何处理JavaScript 中的货币值?
副问题[/!--empirenews.page--]
款子无处不在。 无论在银行应用措施、电子商务网站照旧证券买卖营业所平台,,我们天天都在与款子互动。我们也越来越依靠技能来处理赏罚题目。 然而,关于怎样故编程处理赏罚钱币代价尚无共鸣。固然款子是当代社会中广泛存在的观念,但相较于日期和时刻之类的对象,它并不是任何主流说话中的一流数据范例。功效,每一种软件都有本身的处理赏罚方法,且陪伴着陷阱。 陷阱#1:款子仅仅是数字? 当你必要代表钱时,你的第一向觉也许是行使一个数字。 款子只不外是一个数值,对吧? 错了。 钱币代价的一部门与另一工具有关:钱币。没有10“钱”,应该是“10美元,10欧元,10比特币”......假如你想用差异的钱币添加两个钱币值,你必要先转换它们。假如你想较量它们也是云云:假如你只有一个金额,你就无法举办精确的较量。金额和钱币谁也离不开谁。 陷阱#2:让人烦恼的小数点 大大都当代钱币额都是以小数情势呈现,或基础没有子单元。这意味着当钱币有子单元时,主单元中这些单元的数目是10的幂。譬喻,一美元有100美分——10的2次幂。 行使十进制体系具有上风,但在编程方面有一个题目。计较机行使二进制体系,因此它们不能原生地暗示十进制数。有些说话提出了本身的办理方案,如Java中的BigDecimal范例或C#中的小数范例。JavaScript只有Number范例,可以用作整数或双精度浮点数。由于它是基本10体系的二进制暗示,以是当你实行举办数学运算时,最终会获得禁绝确的功效。 行使浮点来存储钱币代价是一个坏主意。 当你计较更多值时,难以察觉的精度偏差会导致更大的差别。这不行停止地导致最终的四舍五入题目。 陷阱#3:百分比与分派 编程职员应该怎么办? 荣幸的是,软件工程师Martin Fowler提出了一个办理方案。在企业应用措施架构模式中,他描写了钱币代价的模式: 属性 要领 数学:加,减,乘,除 较量:便是,大于,大于或便是,小于,小于或便是。 由此,你可以建设满意大部门钱币需求的代价工具。 “金额+钱币”作为数据布局 款子的举动与简朴的数字差异,因此应区别看待。第一个也是最重要的是:它应该始终由金额和钱币构成。 你可以将钱币金额一路添加,搜查它们的值是否相对应,并将它们名目化为你必要的任何内容。这可以通过工具的要领完成。在JavaScript中,任何返回工具的函数都可以办理题目。 以分计额 有几种要领可以办理JavaScript中的浮点题目。 你可以行使像Decimal.js这样的库来将浮点数作为字符串。这不是一个糟糕的办理方案,当你必需处理赏罚大数字时,它会派上用场。然而,它以增重依靠性为价钱,导致机能低落。 你可以在计较之前将浮点数乘以整数,然后将它们分隔。 这是一个很好的办理方案,但必要在工具结构或每次操纵时举办特另外计较。这不必然会影响机能,但如故必要更多的流程事变。 第三种要领是直接以美分为单元存储相对付单元的值。假如你必要存储10美分,则不会存储0.1,而是10.这应承你仅行使整数,这意味着安详计较(直到你碰着大数字)和精彩的机能。 Dinero.js:一个用于建设、计较和名目钱币代价的不行变库 从以上调查中,我建设了一个JavaScript库:Dinero.js。 Dinero.js遵循Fowler的模式更多一点儿。它应承你在JavaScript中建设、计较和名目化钱币值。你可以举办数学运算、理会和名目化工具,乃至向他们提问,使你的开拓进程越发轻松。 该库计划为不行变和可链接的模式。它支持全局配置,具有扩展名目选项,并提供本机国际化支持。 为什么不行变? 不行变库更安详,更好猜测。可变操纵和引用副本是很多错误的来历。选择稳固机可以或许停止了这些错误。 行使Dinero.js,你可以执行计较而无需担忧变动原始用例。在以下Vue.js示例中,挪用priceWithTax时不会变动Price。假如用例是可变的,它将会变动价值。 可链接性 优越的开拓职员全力使他们的代码更简捷,更易于阅读。当你想要在单个工具上持续执行多个操纵时,链接提供了优雅的标记和简捷的语法。 环球配置 当你处理赏罚大量钱币代价时,你也许但愿个中一些人分享一些属性。假如你行使德语建造网站,你也许但愿以德国钱币名目表现金额。 这是环球配置派上用场的处所。你可以声明将应用于全部新工具的选项,而不是将它们转达给每个用例。 原生国际化支持 传统意义上,库行使地区配置文件举办国际化。 地区配置文件也很难维护。 Internationalization API是原生的,而且获得了很不错的支持。除非你必需行使过期的或不知名的赏识器,不然toFormat可以安详行使。 形成名目 工具很得当存储数据,但在表现数据时却没那么有效。Dinero.js提供了各类名目化要领,包罗toFormat。它为Number.prototype.toLocaleString提供了直观而简捷的语法。将它与setLocale配对,你将可以或许以任何说话将任何Dinero工具表现为正确的名目。这对多说话电子商务网站出格有效。 接下来做什么? (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |