mhjyzs
V2EX  ›  问与答

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

  •  1
     
  •   mhjyzs · Jul 15, 2017 · 5478 views
    This topic created in 3399 days ago, the information mentioned may be changed or developed.

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

    10 replies  •  2017-07-15 22:27:07 +08:00
    alqaz
    alqaz
    Jul 15, 2017 via Android
    2
    自己写一个
    mhjyzs
    mhjyzs
    OP
    Jul 15, 2017
    3
    @KaoN 嗯嗯,谢谢,但是还有个问题是但我设置了输出的精度后,发现经过 stod 转换后为什么数据不精确了,之后输出是-112.07079315185546875。
    KaoN
    KaoN
    Jul 15, 2017
    4
    @mhjyzs #3 输出的精度需要你自己控制吧
    mhjyzs
    mhjyzs
    OP
    Jul 15, 2017
    5
    @KaoN 输出的精度可以控制,我是说转换的时候为啥会转过去有误差?
    unavph
    unavph
    Jul 15, 2017
    6
    浮点数表示机制问题,误差几乎一定存在不可避免。
    unavph
    unavph
    Jul 15, 2017
    7
    你的值是不是有问题,差的有点多,我试了一下是-112.07079219999999964
    mhjyzs
    mhjyzs
    OP
    Jul 15, 2017
    8
    @unavph 我使用 stod("-112.0707922"),然后 cout.precision(20)设置成这样,出来就是上面-112.07079315185546875 这个数,和机器有关吗?
    unavph
    unavph
    Jul 15, 2017
    9
    @mhjyzs 再运行一次,截个图吧
    unavph
    unavph
    Jul 15, 2017
    10
    @mhjyzs 复现到了你的结果,两处不同:不用 stod 而用 stof,-112.0707922 打成-122.0707932
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1404 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:58 · PVG 02:58 · LAX 10:58 · JFK 13:58
    ♥ Do have faith in what you're doing.