Java数值类型为as3类型

时间:2012-08-30 15:10:32

标签: java actionscript-3 flash types

我需要使用从java到flash的bytearray以二进制格式传输数字 flash as3不支持浮点数和长点数。

那么我怎么能这样做,因为它看起来很麻烦,即使我试图将java转换为long并加倍回来?

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)

转换为双倍后,长号丢失了原始值!

2 个答案:

答案 0 :(得分:1)

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

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

如果真的需要很长时间,你可以在Flash中做些什么:

  • 简单:使用两个整数。

  • 复杂:长数学有几个类,不限制你选择任意数量的位,即你可以对数字进行数学运算,直到超过64位。这些传统上称为BigInt或其他一些。谷歌应该找到至少几个实现。搜索加密库,几乎每一个都需要这个类来运行。

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

Java原语:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

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

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/package-detail.html#classSummary(不幸的是,它们与其他顶级课程一起列出,但没有太多的课程让它变得非常困难)。

答案 1 :(得分:0)

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

var myNumber:Number; myNumber = Number.MAX