V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ChristopherWu
V2EX  ›  程序员

你认为你自己可以不借助库函数,写一个浮点数转字符串的函数吗?

  •  
  •   ChristopherWu · 2017-09-30 18:02:03 +08:00 · 4180 次点击
    这是一个创建于 2371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    故意问的问题 xD 不借助库函数的意思是不借助 sprintf 这类型直接做了此事的,其他的如 round 这些函数都可以。

    24 条回复    2017-10-01 23:31:57 +08:00
    ipoh
        1
    ipoh  
       2017-09-30 18:15:41 +08:00
    查一下浮点数的存储格式就行了吧
    Miy4mori
        2
    Miy4mori  
       2017-09-30 18:45:03 +08:00 via iPhone
    抖个机灵 float + ""
    Cooky
        3
    Cooky  
       2017-09-30 18:52:15 +08:00 via Android
    小数点分两部分转字符串
    nodekey
        4
    nodekey  
       2017-09-30 19:10:25 +08:00
    四则运算+取模不是很简单的么…………
    zthxxx
        5
    zthxxx  
       2017-09-30 19:12:50 +08:00
    float => float + []

    js 无所畏惧
    tscat
        6
    tscat  
       2017-09-30 19:17:15 +08:00 via Android
    取模。。
    t1518968889
        7
    t1518968889  
       2017-09-30 19:22:09 +08:00 via Android   ❤️ 7
    唧唧复唧唧,天天造飞机。
    ChristopherWu
        8
    ChristopherWu  
    OP
       2017-09-30 19:23:07 +08:00
    分两部分,小数点后的取整数的方法是不行的:P
    but0n
        9
    but0n  
       2017-09-30 19:50:58 +08:00   ❤️ 3
    121121121
        10
    121121121  
       2017-09-30 20:34:04 +08:00
    可以写,但是平时写程序也是参考很多前人的代码的,写库没有理由不参考,尽量少走弯路是王道
    zmj1316
        11
    zmj1316  
       2017-09-30 21:22:19 +08:00
    写过 verilog 的表示连浮点计算都是用逻辑门写的。。。
    ChristopherWu
        12
    ChristopherWu  
    OP
       2017-09-30 22:00:14 +08:00   ❤️ 1
    @121121121 从此坚定了程序员绝不学底层开发,哈哈哈
    noli
        13
    noli  
       2017-09-30 22:00:29 +08:00   ❤️ 1
    浮点数存储和运算有标准的,要么跟标准做,要么自己发明一个标准。
    跟标准做,写出来有什么难的?
    不跟标准做,写出来又有什么意义。

    不明白题主问这个问题是什么出发点。
    RLib
        14
    RLib  
       2017-09-30 22:08:08 +08:00
    @noli 出发点估计是在笔试规定时间内写出来
    ChristopherWu
        15
    ChristopherWu  
    OP
       2017-09-30 23:06:56 +08:00
    @noli 可能是我学识浅陋, 你可以说说跟着标准做应该怎么做?我觉得挺难的。
    yangff
        16
    yangff  
       2017-09-30 23:13:53 +08:00
    v8 用的 Grisu 算法
    glibc 大概是 Dragon4
    yangff
        17
    yangff  
       2017-09-30 23:17:29 +08:00
    虽然浮点转字符不是很难的事情……
    但是也没有一些人想的这么简单啦……(
    kunjinkao
        18
    kunjinkao  
       2017-09-30 23:19:58 +08:00
    算出每一位,然后 int 转 char
    pezy
        19
    pezy  
       2017-09-30 23:57:08 +08:00
    写出来不算太难,但写快就比较难了,可以参考 https://github.com/miloyip/dtoa-benchmark#results 的结果,看看 https://github.com/miloyip/dtoa-benchmark/blob/master/src/milo/dtoa_milo.h 是怎么写的。
    CEBBCAT
        20
    CEBBCAT  
       2017-10-01 01:16:33 +08:00 via Android
    这是开启了假期模式了吗?呜啦啦啦啦
    xieranmaya
        21
    xieranmaya  
       2017-10-01 01:25:35 +08:00
    这明显是个大坑,具体看你想实现到多完善了,说个简单的,比如说 0.1+0.2 并不是精确存储的 0.3
    现在你拿到这个数了,那你是转出“ 0.3 ”呢还是转出“ 0.30000000000000004 ”呢?
    你又是如何决定转出哪一个呢?
    noli
        22
    noli  
       2017-10-01 03:34:52 +08:00 via iPhone
    @ChristopherWu 有门课叫做数值计算,别说浮点数转字符串,你想展开 pi 都有高速算法,适合各种硬件的都可以有。

    所以我就想知道这种已知的纯数学问题,你问的目的是什么。
    ysc3839
        23
    ysc3839  
       2017-10-01 21:42:54 +08:00 via Android
    我不行……前几天看过 itoa 和 itof 的代码,后者比前者复杂多了。
    ysc3839
        24
    ysc3839  
       2017-10-01 23:31:57 +08:00 via Android
    @ysc3839 纠正:itof 应该是 ftoa。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3547 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:54 · PVG 12:54 · LAX 21:54 · JFK 00:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.