如果计算中有一个(或多个)元素,它总是将结果转换为浮动吗?
例如:
1*1.0 # float
from fractions import Fraction
Fraction(1) * 1.0 # float
答案 0 :(得分:2)
我说如果其中一个参数是float,它总会转换为float,因为float是最常见的数字类型。因此,如果你用浮点数进行一些操作(在你的情况下乘法),其他数字解释器可以确定它可以将其他数字转换为浮点数(不包括int,Fraction或者甚至是Bool)丢失任何信息,但它不能以其他方式做到这一点。
这是链接(https://docs.python.org/2.4/lib/typesnumeric.html) 这表明我忘了显而易见的事情。复数比Float更常见。所以如果你试图将浮动乘以复数。你会变得复杂。
" Python完全支持混合算术:当二进制算术运算符具有不同数字类型的操作数时,操作数具有“更窄”''类型被扩展到另一个类型,其中普通整数比长整数窄,比浮点更窄,比复数更窄。混合类型数字之间的比较使用相同的规则。"
答案 1 :(得分:-1)
不,它有效,因为Fraction类实现了一个console = console || {}; // just in case
//additional method use in watch or unwatch
console._defineProperty=function(oObj, sProp, watch){
sPrivateProp = "$_"+sProp+"_$"; // to minimize the name clash risk
oObj[sPrivateProp] = oObj[sProp];
// overwrite property
Object.defineProperty(oObj, sProp, {
get: function () {
return oObj[sPrivateProp];
},
set: function (value) {
if (watch)//if true then watching if false then not watch
console.log("setting " + sProp + " to " + value);
oObj[sPrivateProp] = value;
}
});
};
console.watch = function(oObj, sProp) {
this._defineProperty(oObj,sProp,true);
};
console.unwatch = function(oObj, sProp) {
this._defineProperty(oObj,sProp,false);
};
//USE CASE
var user={ name:"Tom"};
console.watch(user,"name");
user.name="Mike";//watching
user.name="Rafael";//watching
console.unwatch(user,"name");
user.name="John";//not wathing
user.name="Donatello";//not wathing
console.watch(user,"name");
user.name="Greg";//wathing
user.name="Ron";//wathing
(可能是__mul__
)方法,用于定义与另一个对象(在你的情况下是一个浮点数)的乘法结果。
这称为运营商重载。
编辑:我不明白为什么我被投票。根据你的例子,答案是不,你不总是得到一个浮动,它取决于另一个对象。例如,您可以在Python Fraction源代码中看到__rmul__
和__mul__
的实现:https://hg.python.org/cpython/file/tip/Lib/fractions.py#l421以及执行计算的函数:https://hg.python.org/cpython/file/tip/Lib/fractions.py#l377。< / p>