V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mhjyzs
V2EX  ›  问与答

请教各位 V 友一个 C++关于 string 转 double 精度的问题。

  •  1
     
  •   mhjyzs · 2017-07-15 16:19:11 +08:00 · 4326 次点击
    这是一个创建于 2692 天前的主题,其中的信息可能已经有所发展或是发生改变。

    stod("-112.0707922"),为什么只能得到-112.071 。怎样才能不丢失精度。

    10 条回复    2017-07-15 22:27:07 +08:00
    alqaz
        2
    alqaz  
       2017-07-15 16:56:13 +08:00 via Android
    自己写一个
    mhjyzs
        3
    mhjyzs  
    OP
       2017-07-15 17:44:30 +08:00
    @KaoN 嗯嗯,谢谢,但是还有个问题是但我设置了输出的精度后,发现经过 stod 转换后为什么数据不精确了,之后输出是-112.07079315185546875。
    KaoN
        4
    KaoN  
       2017-07-15 18:33:37 +08:00
    @mhjyzs #3 输出的精度需要你自己控制吧
    mhjyzs
        5
    mhjyzs  
    OP
       2017-07-15 20:27:13 +08:00
    @KaoN 输出的精度可以控制,我是说转换的时候为啥会转过去有误差?
    unavph
        6
    unavph  
       2017-07-15 20:29:25 +08:00
    浮点数表示机制问题,误差几乎一定存在不可避免。
    unavph
        7
    unavph  
       2017-07-15 20:39:47 +08:00
    你的值是不是有问题,差的有点多,我试了一下是-112.07079219999999964
    mhjyzs
        8
    mhjyzs  
    OP
       2017-07-15 22:21:21 +08:00
    @unavph 我使用 stod("-112.0707922"),然后 cout.precision(20)设置成这样,出来就是上面-112.07079315185546875 这个数,和机器有关吗?
    unavph
        9
    unavph  
       2017-07-15 22:24:26 +08:00
    @mhjyzs 再运行一次,截个图吧
    unavph
        10
    unavph  
       2017-07-15 22:27:07 +08:00
    @mhjyzs 复现到了你的结果,两处不同:不用 stod 而用 stof,-112.0707922 打成-122.0707932
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:23 · PVG 12:23 · LAX 20:23 · JFK 23:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.