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

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

  •  
  •   nutting · 2020-11-16 14:41:07 +08:00 · 1854 次点击
    这是一个创建于 1228 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小数,比如 0.1,0.05 ,0.37 ,0.005 ,想让他变成整数,第一个需要乘以 10,后两个需要乘 100,最后乘 1000,怎么计算出来是 10,100,1000,也就是有几位小数?通过代码实现,难道只能转字符数位数?
    11 条回复    2020-11-18 14:38:26 +08:00
    pdszhmilo
        1
    pdszhmilo  
       2020-11-16 14:45:22 +08:00
    是的。字符串判断
    th00000
        2
    th00000  
       2020-11-16 14:54:35 +08:00
    如果这些数字来源是业务的话, 看业务对应的小数点最多到多少, 不太离谱的话递归乘以是 10 也可以
    AllenHua
        3
    AllenHua  
       2020-11-16 14:55:23 +08:00
    除了字符串

    试试普通的循环? 乘以 10 得到整数 break ;没有的话 继续乘以 100,得到整数 break; 没有的话 继续乘以 1000…… 如此以往 break 的时候 乘了多少就是要的结果
    misdake
        4
    misdake  
       2020-11-16 15:01:39 +08:00
    对于正数,取以 10 为底的对数,比如 log10(0.05)=-1.30103,需要+2 才能大于 0,所以是小数点后第二位
    用这种数学方法的话,不同的计算方式可能有误差,需要注意,0.3-0.2=0.09999999999999998
    misdake
        5
    misdake  
       2020-11-16 15:05:31 +08:00
    @misdake 看错问题了,刚才以为是求最高位在第几位。
    求位数的话,我想就不断乘以 10 判断还有没有小数。
    0x2CA
        6
    0x2CA  
       2020-11-16 16:10:30 +08:00
    其他回答的是可以实现的,但是有一些特殊情况,有一些编程语言有设计缺陷,比如 0.1+0.02 可能会变成 0.12000000000001,想自动化是不靠谱的,你需要了解你的编程语言有没有这些陷阱
    QingchuanZhang
        7
    QingchuanZhang  
       2020-11-16 17:16:37 +08:00
    while(abs(x-floor(x))) > eps:
    x *= 10
    llej
        8
    llej  
       2020-11-16 17:25:34 +08:00
    ```javascript
    String(0.005).split('.')[1] * (10 ** String(0.005).split('.')[1].length )
    ```
    🐶
    yonoho
        9
    yonoho  
       2020-11-16 18:10:01 +08:00
    转字符串应该是最合适的,重复乘 10 不好,可能出现精度问题。
    ssynhtn
        10
    ssynhtn  
       2020-11-17 08:43:56 +08:00 via Android
    如果你的小数是浮点数,用位运算提取出这个浮点数 2 的幂次就可以了
    wangtian2020
        11
    wangtian2020  
       2020-11-18 14:38:26 +08:00
    转字符串,看小数点后长度是多少
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3218 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 11:35 · PVG 19:35 · LAX 04:35 · JFK 07:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.