如何解决destring 18 位数字返回舍入错误
我有长度为 18 的 ID 作为字符串,我想将它们转换为数字变量。 我尝试了以下代码:
destring var,replace
这会以数字格式返回变量。但是,ID 的最后一位数字包含舍入错误。例如:123456789123456000 --> 123456789123456001
如何在不更改 ID 的情况下destring
我的值?
解决方法
我无法重现,如下所示:
. clear
. set obs 1
number of observations (_N) was 0,now 1
. gen test = "123456789123456000"
. destring,gen(check)
test: all characters numeric; check generated as double
. l
+--------------------------------+
| test check |
|--------------------------------|
1. | 123456789123456000 1.235e+17 |
+--------------------------------+
. format check %23.0f
. l
+-----------------------------------------+
| test check |
|-----------------------------------------|
1. | 123456789123456000 123456789123456000 |
+-----------------------------------------+
反过来确实会产生错误,因为字符串“123456789123456001”映射到 123456789123456000。本质上,您遇到了每个数字 8 个字节的 double
中可以完全保存的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。