1

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

那么我该怎么做呢,因为即使我尝试将 java long 转换为 double 并返回,它看起来也很乱?

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)

长号转换成双倍后失去了原来的值!

4

2 回答 2

1

你的观察不准确。Flash 支持浮点数。NumberAS3 中的类是doubleJava 中的 IEEE-754 双精度 64 位浮点数。但是,它没有long. Number足以存储 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(不幸的是,它们与其他顶级类一起列出,但数量并不多让它变得非常困难)。

于 2012-08-30T19:11:44.213 回答
0

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

var myNumber:数字;myNumber = Number.MAX

于 2012-08-30T15:21:00.740 回答