故意问的问题 xD 不借助库函数的意思是不借助 sprintf 这类型直接做了此事的,其他的如 round 这些函数都可以。
![]() | 1 ipoh 2017-09-30 18:15:41 +08:00 查一下浮点数的存储格式就行了吧 |
![]() | 2 Miy4mori 2017-09-30 18:45:03 +08:00 via iPhone 抖个机灵 float + "" |
![]() | 3 Cooky 2017-09-30 18:52:15 +08:00 via Android 小数点分两部分转字符串 |
![]() | 4 nodekey 2017-09-30 19:10:25 +08:00 四则运算+取模不是很简单的么………… |
![]() | 5 zthxxx 2017-09-30 19:12:50 +08:00 float => float + [] js 无所畏惧 |
![]() | 6 tscat 2017-09-30 19:17:15 +08:00 via Android 取模。。 |
![]() | 7 t1518968889 2017-09-30 19:22:09 +08:00 via Android ![]() 唧唧复唧唧,天天造飞机。 |
![]() | 8 ChristopherWu OP 分两部分,小数点后的取整数的方法是不行的:P |
![]() | 9 but0n 2017-09-30 19:50:58 +08:00 ![]() |
10 121121121 2017-09-30 20:34:04 +08:00 可以写,但是平时写程序也是参考很多前人的代码的,写库没有理由不参考,尽量少走弯路是王道 |
![]() | 11 zmj1316 2017-09-30 21:22:19 +08:00 写过 verilog 的表示连浮点计算都是用逻辑门写的。。。 |
![]() | 12 ChristopherWu OP ![]() @121121121 从此坚定了程序员绝不学底层开发,哈哈哈 |
13 noli 2017-09-30 22:00:29 +08:00 ![]() 浮点数存储和运算有标准的,要么跟标准做,要么自己发明一个标准。 跟标准做,写出来有什么难的? 不跟标准做,写出来又有什么意义。 不明白题主问这个问题是什么出发点。 |
![]() | 15 ChristopherWu OP @noli 可能是我学识浅陋, 你可以说说跟着标准做应该怎么做?我觉得挺难的。 |
16 yangff 2017-09-30 23:13:53 +08:00 v8 用的 Grisu 算法 glibc 大概是 Dragon4 |
17 yangff 2017-09-30 23:17:29 +08:00 虽然浮点转字符不是很难的事情…… 但是也没有一些人想的这么简单啦……( |
18 kunjinkao 2017-09-30 23:19:58 +08:00 算出每一位,然后 int 转 char |
![]() | 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 是怎么写的。 |
![]() | 20 CEBBCAT 2017-10-01 01:16:33 +08:00 via Android 这是开启了假期模式了吗?呜啦啦啦啦 |
![]() | 21 xieranmaya 2017-10-01 01:25:35 +08:00 这明显是个大坑,具体看你想实现到多完善了,说个简单的,比如说 0.1+0.2 并不是精确存储的 0.3 现在你拿到这个数了,那你是转出“ 0.3 ”呢还是转出“ 0.30000000000000004 ”呢? 你又是如何决定转出哪一个呢? |
22 noli 2017-10-01 03:34:52 +08:00 via iPhone |
![]() | 23 ysc3839 2017-10-01 21:42:54 +08:00 via Android 我不行……前几天看过 itoa 和 itof 的代码,后者比前者复杂多了。 |