V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
wsds
V2EX  ›  Python

0.999820 这种小数,怎么转换成 int 类型

  •  
  •   wsds · 2018-04-13 10:44:54 +08:00 · 6172 次点击
    这是一个创建于 2449 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我要处理一些数据 0.999820,都是这种保留了 6 位小数的 str 类型字段 ,怎么转换成 int 啊,一转换就报错 我最终要拿他作减法运算,转成 float 直接变成 1.0 了,不是我想要的结果,我要保证他还是原来的精度 6 位小数,只不过要转换成 int 类型

    ValueError: invalid literal for int() with base 10: '0.999820'
    
    
    38 条回复    2018-04-14 09:53:50 +08:00
    holajamc
        1
    holajamc  
       2018-04-13 10:51:13 +08:00
    decimal 了解一下
    以及『我要保证他还是原来的精度 6 位小数,只不过要转换成 int 类型』小数和 int 类型同时出现,一定要这么秀嘛…
    winterli
        2
    winterli  
       2018-04-13 11:03:53 +08:00
    如何用 int 来表示带小数的。。。
    不如你换个问题
    为啥用 int 来表示带小数的。。。
    难道计算那边你不能把别的换成 float 算么。
    AlisaDestiny
        3
    AlisaDestiny  
       2018-04-13 11:06:41 +08:00   ❤️ 1
    0.999820 - X = (0.999820 - X ) * 1000000 / 1000000 = (999820 - X * 1000000) / 1000000 .
    lmqdlr
        4
    lmqdlr  
       2018-04-13 11:08:48 +08:00   ❤️ 1
    忽略你描述中存在的问题,我想你大概是想用 int 计算又要求结果保留 6 位小数,那么可以把字符串转成 float,然后把参与运算的数字先乘以 1000000,运算完再除回来
    BearD01001
        5
    BearD01001  
       2018-04-13 11:09:04 +08:00   ❤️ 1
    楼上正解。乘以 1000000 后进行运算,输出结果钱除以 1000000
    BearD01001
        6
    BearD01001  
       2018-04-13 11:09:22 +08:00
    @BearD01001 #5 钱 > 前
    noming
        7
    noming  
       2018-04-13 11:12:33 +08:00
    放大-->运算-->还原,有些数字电路里计数浮点数就是这么处理的
    xuc
        8
    xuc  
       2018-04-13 11:13:32 +08:00
    楼主说的不明不白的

    首先'0.999820'转 float 怎么可能直接变成 1.0 了
    >>> float('0.999820')
    0.99982

    另外你要解决的问题我估计 1~3 楼说的方法可以解决
    hsuan
        9
    hsuan  
       2018-04-13 11:15:14 +08:00
    int,全称是 integer,我觉得楼主缺少一本英汉字典。
    wsds
        10
    wsds  
    OP
       2018-04-13 12:42:08 +08:00
    @hsuan 我有说全称不是 integer ?
    tailf
        11
    tailf  
       2018-04-13 12:44:41 +08:00
    楼主去学习一下什么是 int ......
    Tyanboot
        12
    Tyanboot  
       2018-04-13 12:45:45 +08:00 via Android
    @wsds 你都知道全称是 integer 了你不知道这是“整数”的意思吗。整数类型的小数。牛逼。
    SeanZhaoOrZXY
        13
    SeanZhaoOrZXY  
       2018-04-13 12:47:11 +08:00
    @wsds 他是想说,你可能没搞懂 int 代表什么,否则不会提出这样的转换要求。。
    est
        14
    est  
       2018-04-13 13:15:41 +08:00
    严格按照 LZ 的 narrative 来做这个问题「保留了 6 位小数的 str 类型字段」

    应该是先在字符串里把小数点向右移动 6 位,再做 int,计算完毕之后再除以 1e6
    xpresslink
        15
    xpresslink  
       2018-04-13 13:22:45 +08:00   ❤️ 3
    会问这个问题的基本上是非常小白,你们竟然想扯清清楚楚的?
    yogogo
        16
    yogogo  
       2018-04-13 13:33:59 +08:00
    LZ 应该是说转为数值类型的吧~
    littleylv
        17
    littleylv  
       2018-04-13 13:38:34 +08:00
    又是 int 又是 6 位小数?逗我呢
    projectzoo
        18
    projectzoo  
       2018-04-13 13:41:47 +08:00
    @xpresslink #15 说得有道理。
    tomczhen
        19
    tomczhen  
       2018-04-13 13:42:53 +08:00 via Android   ❤️ 1
    典型的 xy 问题,别浪费时间了。
    Zzde
        20
    Zzde  
       2018-04-13 13:45:19 +08:00 via iPhone
    保持原来精度 6 位小数,还要是 int 型....天秀
    vipppppp
        21
    vipppppp  
       2018-04-13 15:35:44 +08:00   ❤️ 2
    我还以为只有客户会提出这样的要求
    cstj0505
        22
    cstj0505  
       2018-04-13 15:43:39 +08:00
    我以为我学了假的 int
    ctro15547
        23
    ctro15547  
       2018-04-13 15:48:15 +08:00
    float 类型,了解一下?
    ques
        24
    ques  
       2018-04-13 15:48:52 +08:00   ❤️ 1
    指出问题所在就可以了么 为啥 v2 一群人冷嘲热讽的 怎么这种风气?
    qymobile
        25
    qymobile  
       2018-04-13 15:49:13 +08:00
    其实好多帖子都可以回复一个古老的 关于 烧饼的短语
    mcluyu
        26
    mcluyu  
       2018-04-13 16:03:17 +08:00
    这个问题刷新了我对这个论坛的看法,我暂且认为是楼主没有描述清楚或者我理解错误了吧。一开始我还以为要说的是二进制在表示小数时的精度问题,原来并不是。。。。
    dingtian
        27
    dingtian  
       2018-04-13 17:25:42 +08:00
    。。。哈哈哈 不看你的题目,只看你的问题。。对你需要操作的两个数 成个十万一百万什么的,最后结果再除回来。。。精度保留了
    RubyJack
        28
    RubyJack  
       2018-04-13 17:27:15 +08:00
    @ques 因为 LZ 完全没有作为程序员的一点点追求与尊严,我们都很痛心,希望多来几个人喷醒他
    locktionc
        29
    locktionc  
       2018-04-13 17:43:20 +08:00
    这个楼主想要的是 float 型的浮点数,而不是字符串型的浮点数。
    raincoat
        30
    raincoat  
       2018-04-13 19:09:04 +08:00
    前排的回答都很靠谱了~~
    UnknownR
        31
    UnknownR  
       2018-04-13 19:14:37 +08:00
    dog82
        32
    dog82  
       2018-04-13 22:04:26 +08:00
    感觉我精神分裂了
    pmispig
        33
    pmispig  
       2018-04-13 22:34:09 +08:00
    你到底知不知道什么是 int????
    wingkou
        34
    wingkou  
       2018-04-13 22:39:34 +08:00 via Android
    看到这么多人骂楼主我就放心了...
    realpg
        35
    realpg  
       2018-04-13 23:05:00 +08:00
    看到这么多人骂楼主我就放心了...
    lovesky
        36
    lovesky  
       2018-04-14 08:58:08 +08:00 via Android
    看到这么多人骂楼主我就放心了...
    ragnaroks
        37
    ragnaroks  
       2018-04-14 09:26:18 +08:00
    @vipppppp #21 客户也不会提出这种需求...

    @ques #24 因为 sp1234 不在这里
    bombless
        38
    bombless  
       2018-04-14 09:53:50 +08:00 via Android
    我估计是领导要求用 int 算,然后 po 主就懵了。就像楼上说的先乘以 1e6 然后 round 进行计算,结果再除回 1e6 就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3109 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 13:35 · PVG 21:35 · LAX 05:35 · JFK 08:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.