python如何字符串转化为函数计算得小数?eval()只能转化为整数。就像"2/9-3"结果是-2.77777而不是-3
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python如何字符串转化为函数计算得小数?eval()只能转化为整数。就像"2/9-3"结果是-2.77777而不是-3相关的知识,希望对你有一定的参考价值。
参考技术A Python 2.7.1 (r271:86832, Jun 25 2011, 05:09:01)[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = "2/9-3"
>>> print eval(a)
-3
>>> b = "2.0/9-3"
>>> print eval(b)
-2.77777777778
>>>
看看a和b的区别,能解决你的问题吗追问
其实问题是a是一个字符串,像sin(x),x在之前给个赋值,可能也是字符串,所以没办法加上 ' .0 ',这样的话要计算eval(a)该怎么办?
追答字符串也有办法加啊,有各种字符串操作函数可以加这一部分嘛,这样可能是比较直接的方法了
参考技术B >>> a='2/9-3'>>> eval(a.replace('/','./'))
-2.77777777777778
>>> 追问
如上,a里可能没有可以确定的符号,就是无法准确修改,该怎么办?不过replace()对我有其他的启发,谢谢啊
追答用正则匹配表达式里面的字符(如\w+),然后先将匹配的所有结果eval一下,得到所有的值,再用replace替换后放到另外那个字符串里面
不过话说为什么有这种需求?
为何js计算带有小数的加法的时候会出现误差?
很正常的,浮点数运算的误差。哪种语言都这样,只是误差大小不同而已。用解析字符串的方式移动小数点,转化为整数,完毕后,在把小数点复位。
浮点数运算的时候,先转化为二进制,用二进制来算,结果再转回十进制
例如 :求1038.1-1000
1038.1=10000001110.0001100110011001100110011001100110011001100.....
1000= 1111101000
1038.1转化为二进制是个无限循环小数,1100是循环节,只能取近似值,误差就是这里产生的
如果浏览器版本高,可以用toFixed() 方法可把 Number 四舍五入为指定小数位数的数字.
后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。
语法
NumberObject.toFixed(num)
返回值
返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。
抛出
当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。
当调用该方法的对象不是 Number 时抛出 TypeError 异常。
在本例中,我们将把数字舍入为仅有一位小数的数字:
Show the number 13.37 with one decimal:
<script type="text/javascript">
var num = new Number(13.37);
document.write (num.toFixed(1))
</script>
输出:
Show the number 13.37 with one decimal:
13.4 参考技术A 多个相加保留4位:
var num=0;
forEach(it=>
num +=eval(Number(it.value).toFixed(4));
);
num.toFixed(4);
不用eval,就是字符串拼接,没有实际作用。
以上是关于python如何字符串转化为函数计算得小数?eval()只能转化为整数。就像"2/9-3"结果是-2.77777而不是-3的主要内容,如果未能解决你的问题,请参考以下文章