• 请不要在回答技术问题时复制粘贴 AI 生成的内容
huoru
V2EX  ›  程序员

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

  •  
  •   huoru · Sep 30, 2017 · 5062 views
    This topic created in 3149 days ago, the information mentioned may be changed or developed.

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

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

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

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

    所以我就想知道这种已知的纯数学问题,你问的目的是什么。
    ysc3839
        23
    ysc3839  
       Oct 1, 2017 via Android
    我不行……前几天看过 itoa 和 itof 的代码,后者比前者复杂多了。
    ysc3839
        24
    ysc3839  
       Oct 1, 2017 via Android
    @ysc3839 纠正:itof 应该是 ftoa。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4286 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 133ms · UTC 10:11 · PVG 18:11 · LAX 03:11 · JFK 06:11
    ♥ Do have faith in what you're doing.