thermodyna的个人空间工作日志
正文
thermodyna发布于 2018/07/05 15:17
字数 648

阅读 47
由于输入是字符串,可直接利用str.index('.')找到小数点位置(若无小数点,返回值为-1, 则可以此为根据写个if子句跳过小数处理个别。整数的转化:使用变量从左到右依次读入两位数x,y, return:10*x+y小数的转换:和整数类似,只不过return: (x+y/10)/10故重点在于找到并剔除小数点,以小数点为界将字符串分为两块 int and fraction,整数部分写个小变量处理,小数部分写另一个小变量处理,最后整体返回时 return: int + fraction即可整数和小数都使用同样函数处理(即均采取10x+y模式)只不过对小数部分,由于我们即将通过s.index()找到了小数点位置,故直接用这个位置对字符串进行切片存至两个list中去(Int and Frac)字符串转浮点数,首先对两个list都运用map函数使用Int把字符串list转化为int list,之后对整数的list使用reduce(f,Int)字符串转浮点数,其中f即为原方法二中的转换函数(f(x,y) return 10x+y, 对于小数部分,我们实际上可以运用同样操作,即把它只是是整数处理,然后再把小数点移至最左端。怎样移到最左端呢?假设小数部分有n位,那么肯定只要除以10**n即可, 这个n往往就是Frac list的长度。则我们有:对小数部分reduce(f,Frac) //变成整数串
# -*- coding: utf-8 -*-
from functools import reduce
def str2float(s):
def fn(x,y):
return x*10+y
boundary=s.index('.')
Int = list(map(int,[x for x in s[:boundary]]))
Frac = list(map(int,[x for x in s[boundary+1:]]))
return reduce(fn,Int) + reduce(fn,Frac)/(10**len(Frac))
print('str2float(\'123.456\') =', str2float('123.456'))
if abs(str2float('123.456') - 123.456) < 0.00001:
print('测试成功!')
else:
print('测试失败!')
著作权归作者所有

博文 1
码字总数 648
作品 0
奥地利

关注私信提问
相关文章最新文章
.Net 避免 float 转 double 丢失精度的方法
第一部分:float 转 double 丢失精度 类型 精度 位宽 C# 后缀 可以表示的数值范围 .Net 类名 float 7 位 32bit F -3.4 × 10^38 ~ +3.4 × 10^38 System.Single double 15~16 位 64bit D ...

在PHP中常碰到的函数处理函数库(isset()、unset()、empty、is_array...
gettype: 取得变量的类别。 intval: 变量转成整数类型。 doubleval: 变量转成倍浮点数类型。 empty: 判断变量能否已配置。 isarray: 判断函数类别是否为变量种类。 isdouble: 判断变量类型是...
雍雍_yoyo
2013/05/06
Go 一些详细的实用 代码片段
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-138784-1.html
看哭了~~~