编程里一个简单的数学问题?

2020-11-16 14:41:07 +08:00
 nutting
小数,比如 0.1,0.05 ,0.37 ,0.005 ,想让他变成整数,第一个需要乘以 10,后两个需要乘 100,最后乘 1000,怎么计算出来是 10,100,1000,也就是有几位小数?通过代码实现,难道只能转字符数位数?
1881 次点击
所在节点    程序员
11 条回复
pdszhmilo
2020-11-16 14:45:22 +08:00
是的。字符串判断
th00000
2020-11-16 14:54:35 +08:00
如果这些数字来源是业务的话, 看业务对应的小数点最多到多少, 不太离谱的话递归乘以是 10 也可以
AllenHua
2020-11-16 14:55:23 +08:00
除了字符串

试试普通的循环? 乘以 10 得到整数 break ;没有的话 继续乘以 100,得到整数 break; 没有的话 继续乘以 1000…… 如此以往 break 的时候 乘了多少就是要的结果
misdake
2020-11-16 15:01:39 +08:00
对于正数,取以 10 为底的对数,比如 log10(0.05)=-1.30103,需要+2 才能大于 0,所以是小数点后第二位
用这种数学方法的话,不同的计算方式可能有误差,需要注意,0.3-0.2=0.09999999999999998
misdake
2020-11-16 15:05:31 +08:00
@misdake 看错问题了,刚才以为是求最高位在第几位。
求位数的话,我想就不断乘以 10 判断还有没有小数。
0x2CA
2020-11-16 16:10:30 +08:00
其他回答的是可以实现的,但是有一些特殊情况,有一些编程语言有设计缺陷,比如 0.1+0.02 可能会变成 0.12000000000001,想自动化是不靠谱的,你需要了解你的编程语言有没有这些陷阱
QingchuanZhang
2020-11-16 17:16:37 +08:00
while(abs(x-floor(x))) > eps:
x *= 10
llej
2020-11-16 17:25:34 +08:00
```javascript
String(0.005).split('.')[1] * (10 ** String(0.005).split('.')[1].length )
```
🐶
yonoho
2020-11-16 18:10:01 +08:00
转字符串应该是最合适的,重复乘 10 不好,可能出现精度问题。
ssynhtn
2020-11-17 08:43:56 +08:00
如果你的小数是浮点数,用位运算提取出这个浮点数 2 的幂次就可以了
wangtian2020
2020-11-18 14:38:26 +08:00
转字符串,看小数点后长度是多少

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/725791

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX