bool isUnit(Vec)(in Vec v, float tolerance = kindaSmallNumber){
import std.math: abs;
import std.conv: to;
auto length = v.lengthSquared;
return abs(to!(typeof(length))(1) - length) < tolerance;
}
Run Code Online (Sandbox Code Playgroud)
这里我只想计算,1 - length但长度可以是double或float类型.我不想将1从整数转换为float或double在运行时.
我必须做to!(typeof(length))(1) - length或者我能做什么,1 - length并且1总是和长度一样?
1的类型与那里无关.它将自动转换为适当的长度算术类型.
来自http://dlang.org/spec/expression.html#AddExpression
如果任一操作数是浮点类型,则另一个操作数被隐式转换为浮点数,并通过通常的算术转换将它们带到一个公共类型.
因此,无论如何它都是由编译器自动完成的(当然,在编译时知道btw,所以它不会在这里做任何运行时的东西).
但对于想要了解特定问题答案的其他人,您可以使用类型化的文字1.0或类型构造函数typeof(length)(1).