在 Ruby on Rails 中处理国际货币输入

2024-01-10

I have 一个应用程序 http://yourdough.com处理货币输入。但是,如果您在美国,则可以输入一个数字:12,345.67;在法国,可能是12.345,67.

在 Rails 中,是否有一种简单的方法可以使货币输入适应区域设置?

请注意,我并不是在寻找货币的显示(alanumber_to_currency),我正在寻找处理输入货币字符串并将其转换为小数的人。


你可以尝试一下:

   def string_to_float(string)

      string.gsub!(/[^\d.,]/,'')          # Replace all Currency Symbols, Letters and -- from the string

      if string =~ /^.*[\.,]\d{1}$/       # If string ends in a single digit (e.g. ,2)
        string = string + "0"             # make it ,20 in order for the result to be in "cents"
      end

      unless string =~ /^.*[\.,]\d{2}$/   # If does not end in ,00 / .00 then
        string = string + "00"            # add trailing 00 to turn it into cents
      end

      string.gsub!(/[\.,]/,'')            # Replace all (.) and (,) so the string result becomes in "cents"  
      string.to_f / 100                   # Let to_float do the rest
   end

和测试用例:

describe Currency do
  it "should mix and match" do
    Currency.string_to_float("$ 1,000.50").should eql(1000.50)
    Currency.string_to_float("€ 1.000,50").should eql(1000.50)
    Currency.string_to_float("€ 1.000,--").should eql(1000.to_f)
    Currency.string_to_float("$ 1,000.--").should eql(1000.to_f)    
  end     

  it "should strip the € sign" do
    Currency.string_to_float("€1").should eql(1.to_f)
  end

  it "should strip the $ sign" do
    Currency.string_to_float("$1").should eql(1.to_f)
  end

  it "should strip letter characters" do
    Currency.string_to_float("a123bc2").should eql(1232.to_f)
  end

  it "should strip - and --" do
    Currency.string_to_float("100,-").should eql(100.to_f)
    Currency.string_to_float("100,--").should eql(100.to_f)
  end

  it "should convert the , as delimitor to a ." do
    Currency.string_to_float("100,10").should eql(100.10)
  end

  it "should convert ignore , and . as separators" do
    Currency.string_to_float("1.000,10").should eql(1000.10)
    Currency.string_to_float("1,000.10").should eql(1000.10)
  end

  it "should be generous if you make a type in the last '0' digit" do
    Currency.string_to_float("123,2").should eql(123.2)
  end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Ruby on Rails 中处理国际货币输入 的相关文章

随机推荐

  • 根据用户输入将单词中的字母加粗

    我的应用程序中有一个搜索组件 当用户输入一些文本时 它会根据用户输入过滤数据并显示过滤数据的列表 我想要做的是将用户搜索的文本在过滤后的数据中加粗 例如 如果我搜索 Jo 过滤后的数据应显示为John Joseph Joe Rogan 我可
  • 爆炸函数后将值添加到一个数组

    我正在尝试从所有行获取所有路径并将它们 爆炸后 添加到一个数组中 以便将它们显示为复选框 这是我的代码 result mysql query select path from audit where ind ind exp array wh
  • SPOJ ADDREV 问题

    我确实浏览了其他线程SPOJ http en wikipedia org wiki SPOJ问题 ADDREV https www spoj pl problems ADDREV 添加反转数字 但遗憾的是 我无法通过我编写的三个程序 C P
  • 即使我调用 componentHandler.upgradeDom(),汉堡包图标也不会显示;

  • 测试替身有哪些不同类型及其用途?

    我正在学习有关测试驱动开发的在线课程 并遇到了测试替身的概念 根据课程中测试替身的定义 测试双打 测试替身是在单元测试中用于替代实际生产系统协作者的对象 我知道测试双打是什么意思了 但后来有人提到 测试替身有多种类型 课程中提到的内容是 D
  • 将日期向量转换为 R 中的儒略日

    我有一列格式如下的日期 10年6月16日 我想提取儒略日 我有不同的岁月 我尝试过 julian 和 mdy date 函数 但似乎不起作用 尝试以下方法从类转换character 即文本 到课堂POSIXlt 然后提取儒略日 yday t
  • glDeleteBuffers() 在析构函数调用期间崩溃

    正如 Qt 用户所知 使用任何 OpenGL 扩展都可能非常麻烦 我让它工作的方法是扩展 QGLFunctions 类 如下所示 class Object3D protected QGLFunctions 为了使 Object3D 能够正确
  • 任务管理器、ProcessExplorer 或类似工具:监视和管理 CLR 线程

    有没有一种工具可以查看托管线程在 CLR 中运行的情况 理想情况下 我希望看到 CPU 负载 状态 托管名称和托管 id 即使该线程属于线程池 或者是后台线程 它将能够对线程池 前台线程和后台线程进行分组 折叠 动机 我正在使用 CLR P
  • 未生成 iOS 的 Xcode 6.1 静态库 .a

    我尝试使用 Xcode 6 1 为我的 iOS 设备制作静态库 我在 Xcode 上选择一个带有模板 Cocoa Touch Static Library 的新项目并将其命名为 MyLib 对于 MyLib 目标 我在模拟器中选择 iPho
  • 在 kotlin js 中嵌入资源

    在 kotlin jvm 中 或者在 java 中 不管怎样 我们可以通过资源输入流读取资源内容 有没有办法在 kotlin js 中做到这一点 现在我正在通过 ajax 调用请求资源 但最好将资源自动嵌入到已编译的 javascript
  • 从 JSON 文件导入 Google 应用脚本项目

    在 Google Drive 中 可以将应用程序脚本项目下载为 json file 当此类文件导入回 Google 云端硬盘时 它与 Google 脚本编辑器应用程序没有正确关联 有什么办法可以正确地做到这一点吗 导入和导出 Apps 脚本
  • iphone如何指定Class数据类型必须采用某种协议

    在我的应用程序中 我需要返回 Class 作为返回类型 例如 应用 m Class getParserClass return NCCurrencyParser class NCCurrencyParser m interface NCCu
  • 查找文本中出现的大量短语

    我正在构建一个后端并尝试解决以下问题 客户端向后端提交文本 大约2000平均字符数 接收请求的后端端点必须对提交的文本应用短语突出显示 周围有80k要匹配的短语 短语是一个简单的对象 phrase phrase to match link
  • 如何确定 Colliderect 中对象相互穿过的原因

    由于某种原因 Colliderect 无法工作 雨水会穿过人行道 这真的很烦人 因为所有这些未使用的精灵都会产生大量的延迟 import pygame import random class Square pygame sprite Spr
  • 使用 jQuery 从一组选择菜单中删除和添加选项

    这比标题所描述的要复杂一些 但以下是基本的业务规则 上面有三个选择菜单 页面 每个页面都填充相同的内容 选项和值 总会有三个选择 菜单 总会有相同的数字 每个选择中的选项 值 菜单 在任一问题中选择一个问题 菜单将删除该问题作为选项 另外两
  • 使用“car”跨列范围重新编码

    我在网上查了一下 不知道如何申请car重新编码一系列列的值 要重新编码单个列的值 我将运行以下命令 df dv r lt recode df dv 2 1 1 0 0 NA 然后 如果我想对整个 data frame 执行此操作 我可以运行
  • 选项[selected=true] 不起作用

    我有这个命令 visibleSelect 是保存多个选择列表的 jquery 变量 var selectedOption visibleSelect find option selected true 从观察窗我可以看到selectedOp
  • 如何在 Xcode 7.0 beta 2 中运行 iOS 7.1 模拟器?

    我已经安装了最新的 Xcode 7 beta 2 版本 当我尝试在 iOS 7 1 模拟器中运行该应用程序时 它给出了以下错误消息 iOS 7 1 模拟器运行时不可用 无法打开 liblaunch sim dylib 尝试重新安装 Xcod
  • 如何从 gi.repository 导入 gtk.gdk

    我有这个 python 代码 可以截取 x 屏幕的屏幕截图 usr bin python import gtk gdk w gtk gdk get default root window sz w get size print The si
  • 在 Ruby on Rails 中处理国际货币输入

    I have 一个应用程序 http yourdough com处理货币输入 但是 如果您在美国 则可以输入一个数字 12 345 67 在法国 可能是12 345 67 在 Rails 中 是否有一种简单的方法可以使货币输入适应区域设置