你认为你自己可以不借助库函数,写一个浮点数转字符串的函数吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时制粘贴 AI 生成的内容
ChristopherWu
V2EX    程序员

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

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

    故意问的问题 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     Solana     3207 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:31 PVG 19:31 LAX 04:31 JFK 07:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86