【问题标题】:Java numeric types to as3 typesJava 数字类型到 as3 类型
【发布时间】:2012-08-30 15:10:31
【问题描述】:

我需要使用字节数组将二进制格式的数字从 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)

Long 数转换成double 后失去原来的值!

【问题讨论】:

  • 这就是浮点的本质。并非所有的 long 都可以精确地表示为双精度数。
  • AS3 在使用 AMF 序列化时支持 Java LongDouble。你的问题到底是什么?
  • AS3 确实支持浮点为 Number link,尽管它确实有限制。也就是说,你不是唯一一个为此苦苦挣扎的人。 link
  • 问题是我无法将 double 转换为 long,以便与仅支持与 java double 相同的 Number 类型的 as3 兼容。

标签: java actionscript-3 flash types


【解决方案1】:

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

不可能与Javalong有确切的类比,因为存储浮点数的格式保留了一些位用于其他用途,实际上只使用了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(不幸的是,它们与其他顶级类一起列出,但数量并不多,很难做到)。

【讨论】:

    【解决方案2】:

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

    var myNumber:Number; myNumber = Number.MAX

    【讨论】:

    • 更准确地说,这个返回的值与原始 System.out.println("double: " + new Double(92233720368547758l*1.0).longValue());它返回“92233720368547760”
    猜你喜欢
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2014-06-27
    • 2010-12-31
    • 2015-10-15
    相关资源
    最近更新 更多