微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

destring 18 位数字返回舍入错误

如何解决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 举报,一经查实,本站将立刻删除。