python str类型科学计数法转换成int或float类型

本文介绍了一种将科学计数法表示的字符串转换为浮点数或整数的方法,通过自定义函数解决了从文本文件读取科学计数法表示数值后的类型转换问题,并提供了四舍五入和小数点后保留位数的技巧。

问题描述

  • 该文章所说,一个长一点的数字如‘0.000003’转换成str类型时候变成科学计数法表示。
  • 所以当从txt或者xml文档中读出一个科学计数法表示的str字符串,没有一个直接可用的方法转换回我们需要的数字类型。
  • 找了一下网上好像没有这样的函数,所以我自己写一个,目的是把str类型科学计数法转换成int或float类型

函数:

import math
def fun(str_num):
    before_e = float(str_num.split('e')[0])
    sign = str_num.split('e')[1][:1]
    after_e = int(str_num.split('e')[1][1:])

    if sign == '+':
        float_num = before_e * math.pow(10, after_e)
    elif sign == '-':
        float_num = before_e * math.pow(10, -after_e)
    else:
        float_num = None
        print('error: unknown sign')
    return float_num

例子:

输入:

print(fun('2.239035e+05'))
print(fun('1.596312e-02'))
print(fun('-7.829694e+01'))
print(fun('-1.755057e-02'))

输出:

223903.5
0.01596312
-78.29694
-0.01755057

改进:

可以根据需要转换成int型, 四舍五入

int_num = int(round(float_num))

分享一个指定小数点数量四舍五入的方法(示例是2位小数)

from decimal import Decimal
float_num= Decimal(float_num).quantize(Decimal('0.00'))
<think> 我们需要将数据换为int类型。在Python中,可以使用内置的int()函数来实现。 注意:换时需要考虑输入数据的类型和格式,例如字符串、浮点数等,同时要处理可能的异常(如换失败)。 以下是一个安全的换函数,包含异常处理。 </think>在 Python 中将数据换为整数类型int)有多种方法,最常用的是使用内置的 `int()` 函数。以下是详细的解决方案和代码示例: ### 基本换方法 ```python # 使用 int() 函数进行换 num_str = "123" num_float = 45.67 num_bool = True # 字符串整数 int_from_str = int(num_str) print(int_from_str, type(int_from_str)) # 输出: 123 <class 'int'> # 浮点数整数(截断小数部分) int_from_float = int(num_float) print(int_from_float, type(int_from_float)) # 输出: 45 <class 'int'> # 布尔值整数 int_from_bool = int(num_bool) print(int_from_bool, type(int_from_bool)) # 输出: 1 <class 'int'> ``` ### 处理不同进制换 ```python # 二进制十进制 binary_str = "1010" int_from_bin = int(binary_str, 2) print(int_from_bin) # 输出: 10 # 十六进制十进制 hex_str = "FF" int_from_hex = int(hex_str, 16) print(int_from_hex) # 输出: 255 # 八进制十进制 octal_str = "77" int_from_oct = int(octal_str, 8) print(int_from_oct) # 输出: 63 ``` ### 异常处理与安全换 ```python def safe_convert_to_int(value, default=0): try: return int(value) except (ValueError, TypeError): return default # 测试异常处理 print(safe_convert_to_int("123")) # 输出: 123 print(safe_convert_to_int("abc")) # 输出: 0 (默认值) print(safe_convert_to_int(None)) # 输出: 0 print(safe_convert_to_int([1, 2, 3])) # 输出: 0 print(safe_convert_to_int("3.14", 100)) # 输出: 100 (自定义默认值) ``` ### 特殊换场景 ```python # 处理带千位分隔符的数字 num_with_comma = "1,000,000" cleaned_num = num_with_comma.replace(",", "") int_num = int(cleaned_num) print(int_num) # 输出: 1000000 # 科学计数法换 sci_notation = "2.5e3" int_from_sci = int(float(sci_notation)) # 先浮点再整数 print(int_from_sci) # 输出: 2500 ``` ### 解释说明: 1. **基本换**: - `int()` 函数可以处理字符串、浮点数、布尔值等类型 - 浮点数换会直接截断小数部分(非四舍五入) 2. **进制换**: - 第二个参数指定进制(2-36之间) - 支持二进制、八进制、十六进制等换 3. **异常处理**: - 使用 try-except 捕获 `ValueError`(无效字面量)和 `TypeError`(不支持类型) - 提供默认值避免程序崩溃 4. **特殊场景**: - 清理千位分隔符后再换 - 科学计数法需先浮点数再整数 5. **注意事项**: - 换空字符串 `""` 会引发 ValueError - 换超出整数范围的值会引发 OverflowError - 处理 `None` 类型需要额外检查
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值