我目前正在尝试使用带有简单代码的 angelscript,遵循官方网站的示例。
但是当我尝试在我的脚本中初始化如下所示的双变量时:
double x=1/2;
变量 x 似乎用值 0 初始化。
它仅在我写 double x=1/2.0; 时才有效;或双 x=1.0/2;
当我键入 double x=1/2 而不在脚本中添加更多代码时,是否存在使 angelscript 以双精度工作的方法?
谢谢,
我目前正在尝试使用带有简单代码的 angelscript,遵循官方网站的示例。
但是当我尝试在我的脚本中初始化如下所示的双变量时:
double x=1/2;
变量 x 似乎用值 0 初始化。
它仅在我写 double x=1/2.0; 时才有效;或双 x=1.0/2;
当我键入 double x=1/2 而不在脚本中添加更多代码时,是否存在使 angelscript 以双精度工作的方法?
谢谢,
使用一些宏观诡计:
#include <stdio.h>
#define DIV * 1.0 /
int main(void)
{
double x = 1 DIV 2;
printf("%f\n", x);
return 0;
}
DIV
也可以定义为:
#define DIV / (double)
这是因为1
和2
是整数,并且:
int x = 1/2;
将为0。如果x
实际上是双精度数,则会得到隐式强制转换:
double x = (double)(1/2);
这意味着1/2 = 0
成为0.0
. 请注意,这与以下内容不同:
double x = (double)1/2;
哪个会做你想做的事。
带小数的数字是双精度数,整数除以双精度数产生双精度数。您也可以通过转换每个数字来做到这一点:
double x = (double)1/(double)2;
如果1
并且2
实际上是 int 变量,这很方便——通过这种方式转换,它们的值将在除法之前转换为双精度,因此乘积将是双精度。
当你除以一个int
时int
,结果是一个int
。商是结果,余数被丢弃。在这里,1 / 2
产生的商为零,余数为 1。如果需要double
,请尝试1.0 / 2
。
不,没有办法double
通过将两个int
s 相除而不转换结果来获得 a 。