【问题标题】:Convert Scientific Notation to Float将科学记数法转换为浮点数
【发布时间】:2014-09-25 19:15:00
【问题描述】:

遇到了一个问题,我的 JSON 数据被打印为科学记数法而不是浮点数。

import urllib2
import json
import sys

url = 'https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-quid'
json_obj = urllib2.urlopen(url)
QUID_data = json.load(json_obj)

QUID_MarketName_Trex = QUID_data["result"][0]["MarketName"][4:9]
QUID_Last_Trex = QUID_data["result"][0]["Last"]
QUID_High_Trex = QUID_data["result"][0]["High"]
QUID_Low_Trex = QUID_data["result"][0]["Low"]
QUID_Volume_Trex = QUID_data["result"][0]["Volume"]
QUID_BaseVolume_Trex = QUID_data["result"][0]["BaseVolume"]
QUID_TimeStamp_Trex = QUID_data["result"][0]["TimeStamp"]
QUID_Bid_Trex = QUID_data["result"][0]["Bid"]
QUID_Ask_Trex = QUID_data["result"][0]["Ask"]
QUID_OpenBuyOrders_Trex = QUID_data["result"][0]["OpenBuyOrders"]
QUID_OpenSellOrders_Trex = QUID_data["result"][0]["OpenSellOrders"]
QUID_PrevDay_Trex = QUID_data["result"][0]["PrevDay"]
QUID_Created_Trex = QUID_data["result"][0]["Created"]
QUID_Change_Trex = ((QUID_Last_Trex - QUID_PrevDay_Trex)/ QUID_PrevDay_Trex)*100
QUID_Change_Var = str(QUID_Change_Trex)
QUID_Change_Final = QUID_Change_Var[0:5] + '%'

print QUID_Last_Trex   

它打印以下值; 1.357e-05。 我需要这是一个浮点数,小数点后有 8 个字符(0.00001370)

正如您在此处看到的 --> http://i.imgur.com/FCVM1UN.jpg,我的 GUI 正确显示第一行(使用完全相同的代码)。

【问题讨论】:

    标签: python decimal notation


    【解决方案1】:

    您正在查看浮点数的默认str() 格式,其中科学计数法用于足够小或足够大的数字。

    你不需要转换这个,值本身是一个合适的浮点数。如果您需要以不同的格式显示,format it explicitly:

    >>> print(0.00001357)
    1.357e-05
    >>> print(format(0.00001357, 'f'))
    0.000014
    >>> print(format(0.00001357, '.8f'))
    0.00001357
    

    这里f 格式总是 使用定点表示法作为值。默认精度为 6 位; .8 指示 f 格式化程序改为显示 8 位数字。

    在 Python 3 中,默认的字符串格式与format(fpvalue, '.16g') 基本相同; g 格式使用科学或定点表示,具体取决于数字的指数。 Python 2 使用了'.12g'

    【讨论】:

      【解决方案2】:

      您可以使用打印格式:

      x = 1.357e-05    
      print('%f' % x)
      

      编辑:

      print('%.08f' % x)
      

      【讨论】:

      • 链接到 JSON--> bittrex.com/api/v1.1/public/getmarketsummary?market=btc-quid ## Object LAST 现在读取 '0.00001361'。使用您的解决方案,它会打印“0.000014”。出于某种原因,它被四舍五入了。
      • 是的,它在点后四舍五入为 6 个数字。正如 Martijn Pieters 所写,您可以指定它。 >>> 打印('%.08f' % x)
      • 顺便说一句。为什么您期望 0.00001370 而不是 1.357e-05 的 0.00001357?
      • 谢谢!这是一种加密货币的汇率,最后 2 位小数有很大的不同,因此我需要全部 8 位来显示。现在可以了。非常感谢先生。
      【解决方案3】:

      有一些方法:


      #1 float(...) + 可选 round().format()

      x = float(1.357e-05)
      round(x, 6)
      "{:.8f}".format(x)
      

      #2 与 decimal

      import decimal
      
      tmp = decimal.Decimal('1.357e-05')
      print('[0]', tmp)
      # [0] 0.00001357
      
      tmp = decimal.Decimal(1.357e-05)
      print('[1]', tmp)
      # [1] 0.0000135700000000000005188384444299032338676624931395053863525390625
      
      decimal.getcontext().prec = 6
      tmp = decimal.getcontext().create_decimal(1.357e-05)
      print('[2]', tmp)
      # [2] 0.0000135700
      

      #3 .rstrip(...)

      x = ("%.17f" % n).rstrip('0').rstrip('.')
      

      注意:%f 的对应项:
      %f 显示标准符号
      %e 显示科学记数法
      %g 显示默认值(如果 5 个或更多零则为科学)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 1970-01-01
        • 2015-07-03
        • 2014-07-01
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多