Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数字类型到as3类型_Java_Actionscript 3_Flash_Types - Fatal编程技术网

Java数字类型到as3类型

Java数字类型到as3类型,java,actionscript-3,flash,types,Java,Actionscript 3,Flash,Types,我需要使用字节数组将二进制格式的数字从java传输到flash,但是 flash as3不支持浮动和长时间 所以,即使在我尝试将java long转换为double和back时,它看起来也很混乱,我该怎么做呢 长数转换为双精度后失去原值 在动作脚本中,必须使用“数字”类型 var myNumber:编号; myNumber=Number.MAX在动作脚本中,必须使用“Number”类型 var myNumber:编号; myNumber=Number.MAX您的观察结果不精确。Flash支持浮动

我需要使用字节数组将二进制格式的数字从java传输到flash,但是 flash as3不支持浮动和长时间

所以,即使在我尝试将java long转换为double和back时,它看起来也很混乱,我该怎么做呢


长数转换为双精度后失去原值

在动作脚本中,必须使用“数字”类型

var myNumber:编号;
myNumber=Number.MAX

在动作脚本中,必须使用“Number”类型

var myNumber:编号;
myNumber=Number.MAX

您的观察结果不精确。Flash支持浮动Number类是Java中的
double
,即IEEE-754双精度64位浮点。但是,它没有
long
Number
足以存储Java
float
,因为这也是一个float,但大小较小(只需要32位)。Flash可以将这些值读写到ByteArray中,但在类型层次结构中没有对应的类型

不可能与Java
long
完全相似,因为存储浮点数的格式会保留一些位用于其他目的,实际上只使用52位来保存浮点值

如果您真的需要长时间使用Flash,您可以做什么:

  • 简单:使用两个整数

  • 复杂:有两个用于长数学的类,它们不会将您限制为任意选择的位数,也就是说,您可以对远远超过64位的数字进行数学运算。这些传统上被称为BigInt或类似的东西。谷歌应该找到至少两个实现。搜索密码学库,几乎每个库都需要这个类来操作

您可能会发现一些有用的信息:

Java原语:

Flash顶级类(也包括所有数字类型):


(不幸的是,它们与其他顶级课程一起列出,但数量不多,因此很难做到这一点)。

你的观察是不精确的。Flash支持浮动Number类是Java中的
double
,即IEEE-754双精度64位浮点。但是,它没有
long
Number
足以存储Java
float
,因为这也是一个float,但大小较小(只需要32位)。Flash可以将这些值读写到ByteArray中,但在类型层次结构中没有对应的类型

不可能与Java
long
完全相似,因为存储浮点数的格式会保留一些位用于其他目的,实际上只使用52位来保存浮点值

如果您真的需要长时间使用Flash,您可以做什么:

  • 简单:使用两个整数

  • 复杂:有两个用于长数学的类,它们不会将您限制为任意选择的位数,也就是说,您可以对远远超过64位的数字进行数学运算。这些传统上被称为BigInt或类似的东西。谷歌应该找到至少两个实现。搜索密码学库,几乎每个库都需要这个类来操作

您可能会发现一些有用的信息:

Java原语:

Flash顶级类(也包括所有数字类型):


(不幸的是,它们与其他顶级类一起列出,但数量不多,因此很难实现)。

这就是浮点运算的本质。并非所有的Long都可以精确地表示为Double。AS3在使用AMF序列化时支持Java
Long
Double
。您的问题到底是什么?AS3支持浮点数作为
Number
,尽管它有一些限制。也就是说,你不是唯一一个在这方面挣扎的人。问题是我无法将double转换为long,以便与as3兼容,因为as3只支持与java double相同的数字类型。这就是浮点的本质。并非所有的Long都可以精确地表示为Double。AS3在使用AMF序列化时支持Java
Long
Double
。您的问题到底是什么?AS3支持浮点数作为
Number
,尽管它有一些限制。也就是说,你不是唯一一个在这方面挣扎的人。问题是,我无法将double转换为long,以便与仅支持与java double相同的数字类型的as3兼容。更准确地说,这一个返回的值与原始System.out.println不同(“double:+new double(92233720368547758l*1.0).longValue();它返回“92233720368547760”更准确地说,这个返回的值与原始System.out.println不同(“double:+新的double(92233720368547758l*1.0).longValue());它返回“92233720368547760”
public static void main(String[] args)
{
    long l = Long.MAX_VALUE/100;
    Double d= l;

    System.out.println("long  : " + l);
    System.out.println("double: " + (long)d);
}
run:

long  : 92233720368547758

double: 92233720368547760

BUILD SUCCESSFUL (total time: 1 second)