r - R中的数字正确舍入
问题描述
关于这个问题有很多线程。似乎没有人回答这个简单的问题:为什么 R 不正确地四舍五入,我怎样才能让它正确地四舍五入?
正确舍入到第 i 个小数 x 考虑第 i+1 个小数。如果它是 5 或更大,则 x 设置为 x+1。如果它是 4 或更小,则返回 x。例如 1.45 四舍五入到小数点后为 1.5。1.44 四舍五入 1.4。然而,在R
> round(1.45,1)
[1] 1.4
但
> round(1.46,1)
[1] 1.5
因此它将约定更改为“如果第 i+1 位小数为 6 或更大,则 x 设置为 x+1”。为什么?我怎样才能将其更改为我熟悉的约定?
解决方案
大多数小数不能用二进制双精度精确表示
在这里学习:https ://stat.ethz.ch/R-manual/R-devel/library/base/html/Round.html
“警告”部分:
在二进制算术中四舍五入到十进制数字是不平凡的(当数字!= 0 时)并且可能令人惊讶。请注意,大多数十进制分数不能以二进制双精度精确表示。在 R 4.0.0 中,对于 d > 0 的 round(x, d) 算法进行了改进,以测量和舍入“到最接近的偶数”,这与 R 的早期版本(或 sprintf() 或 format( ) 基于舍入)。
推荐阅读
- marklogic - 使用 MarkLogic 补丁更新一个或多个值
- sql - SQL Server - 将行旋转到固定数量的列中,列排序而不是行
- go - 无法使用 ArangoDB 的 go 驱动程序创建文档
- user-interface - Jmeter 不通过远程桌面显示 (xrdp)
- cqrs - CQRS - 如果命令需要来自 db 的数据(查询),如何处理
- r - 如何在 R 中从长数据帧到宽数据帧,多个值在焦点列中用逗号分隔
- javascript - 验证密码 - 必须包含 2 个大写字母
- python - 求各州县房价指数3年升值情况
- coldfusion - 范围应用程序中的 Application.cfc 变量和内存
- angular - 通过将 tha 模块路径作为字符串导入来加载 angular ivy 库组件