【问题标题】:Input with 2 decimals, assume first 2 numbers are a decimal输入 2 个小数,假设前 2 个数字是小数
【发布时间】:2015-04-22 22:06:02
【问题描述】:

在 Javascript / AngularJS 中执行以下操作的最佳方法是什么?

我有一个输入框和一个软数字 10 键(按钮)。

而不是让用户输入“。”在键盘上或按“。”在软垫上,输入应假定 2 位或更少的数字是小数

User Enters:
1 = 0.01
2 = 0.12
3 = 1.23
.00 = 123.00

它需要能够处理混合键盘和软键输入。 用户可以按“。”物理数字键盘上的键。软小键盘只有 0 和 .00,没有“.”。键。

退格键会从右边删除 1 个数字。 100.50 然后单击退格应该产生 10.50,而不是 100.5

“固定小数”的优点是不需要输入“.”,这比在右侧的快速现金按钮之外输入整数要常见得多。

货币格式输入框中的值是一项要求,但超出了此特定问题的范围。 (考虑使用 ng-currency 或 numbrojs(因为 ng-currency 将模型存储为浮点数)。

我目前正在解决这个问题:

  function concatNumber(num)
  {
        if (vm.transaction.paymentAmount === undefined || vm.transaction.paymentAmount === 0 || vm.transaction.paymentAmount === '')
        {
            vm.transaction.paymentAmount = '0.0' + num;
            return;
        }
}

【问题讨论】:

  • 您是否尝试过任何方法来实现这一目标?
  • 是的,我现在正在处理它,我编辑了我的问题以包括我到目前为止的内容。
  • 快速思路:将输入字符串视为美分数,然后将美分数除以 100 后格式化为小数点后两位。
  • @ryanyuyu 谢谢,我没想到。我正要写一堆正则表达式。
  • @Robert 我在 C# 中看到了一个类似的问题(或者它是 Java 吗?)。我会提供一个链接,但我找不到它。无论如何,祝你好运。

标签: javascript angularjs currency


【解决方案1】:

每当我在 JavaScript 中做任何涉及货币的事情时,我都会求助于Accounting.js。在我推荐的many other reasons 中,它还有助于自动格式化数字。

这是文档demo 部分的链接。

【讨论】:

    【解决方案2】:

    我最终使用了字符串而不是数字。然后用parseFloat() 转换字符串并除以100。我在过滤器中执行此操作,其中字符串值保持为'100' // $1.00

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2013-09-24
      • 2016-08-12
      • 2014-07-15
      • 2014-05-03
      相关资源
      最近更新 更多