ruby-on-rails - 在 RSpec 中比较十进制值的正确方法?
问题描述
我有这个规范来检查预期的数字:
expect(animal_cost).to eq(0.7771118644067795e5)
我收到一条错误消息:
expected: 77711.18644067795
got: 0.7771118644067795e5
如您所见,我得到的数字与我预期的相同,所以我很困惑为什么会失败。如何设置规格?
animal_cost.class
是一个 BigDecimal。
解决方案
使用 rspec 验证浮点数的最佳方法是使用be_within
匹配器。浮点数不能以二进制形式在数学上完全准确地表示。肯定会有一些舍入误差。
在你的情况下,一个人会写:
expect(animal_cost).to be_within(0.001).of(0.7771118644067795e5)
推荐阅读
- android - 错误类型 3 - 错误:活动类 MainActivity 不存在
- sql-server - 为满足特定条件的行组合第一行和最后一行的值
- powershell - PowerShell Out-GridView
- symfony - 无法使用 Sonata 管理表单添加
- ubuntu - 在我的电脑上安装 lokinet mixnet 后如何获取我的 lokinet 地址?
- sql - 从更新日期为 MAX 的 50 列以上的表中选择所有行
- node.js - 如何使用 ajax 使用 AWS lambda 和 nodejs 发布到 kintone 端点
- jasper-reports - 不同的页边距取决于奇数页或偶数页
- swiftui - SwiftUI:对齐文本
- django - 在 AWS Elastic Beanstalk 上部署时,无法通过映像名称引用与 docker 一起使用的 RabbitMQ