Java数字类型到as3类型
我需要使用字节数组将二进制格式的数字从java传输到flash,但是 flash as3不支持浮动和长时间 所以,即使在我尝试将java long转换为double和back时,它看起来也很混乱,我该怎么做呢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支持浮动
长数转换为双精度后失去原值 在动作脚本中,必须使用“数字”类型 var myNumber:编号;
myNumber=Number.MAX在动作脚本中,必须使用“Number”类型 var myNumber:编号;
myNumber=Number.MAX您的观察结果不精确。Flash支持浮动
double
,即IEEE-754双精度64位浮点。但是,它没有long
Number
足以存储Javafloat
,因为这也是一个float,但大小较小(只需要32位)。Flash可以将这些值读写到ByteArray中,但在类型层次结构中没有对应的类型
不可能与Javalong
完全相似,因为存储浮点数的格式会保留一些位用于其他目的,实际上只使用52位来保存浮点值
如果您真的需要长时间使用Flash,您可以做什么:
- 简单:使用两个整数
- 复杂:有两个用于长数学的类,它们不会将您限制为任意选择的位数,也就是说,您可以对远远超过64位的数字进行数学运算。这些传统上被称为BigInt或类似的东西。谷歌应该找到至少两个实现。搜索密码学库,几乎每个库都需要这个类来操作
(不幸的是,它们与其他顶级课程一起列出,但数量不多,因此很难做到这一点)。你的观察是不精确的。Flash支持浮动
double
,即IEEE-754双精度64位浮点。但是,它没有long
Number
足以存储Javafloat
,因为这也是一个float,但大小较小(只需要32位)。Flash可以将这些值读写到ByteArray中,但在类型层次结构中没有对应的类型
不可能与Javalong
完全相似,因为存储浮点数的格式会保留一些位用于其他目的,实际上只使用52位来保存浮点值
如果您真的需要长时间使用Flash,您可以做什么:
- 简单:使用两个整数
- 复杂:有两个用于长数学的类,它们不会将您限制为任意选择的位数,也就是说,您可以对远远超过64位的数字进行数学运算。这些传统上被称为BigInt或类似的东西。谷歌应该找到至少两个实现。搜索密码学库,几乎每个库都需要这个类来操作
(不幸的是,它们与其他顶级类一起列出,但数量不多,因此很难实现)。这就是浮点运算的本质。并非所有的Long都可以精确地表示为Double。AS3在使用AMF序列化时支持Java
Long
和Double
。您的问题到底是什么?AS3支持浮点数作为Number
,尽管它有一些限制。也就是说,你不是唯一一个在这方面挣扎的人。问题是我无法将double转换为long,以便与as3兼容,因为as3只支持与java double相同的数字类型。这就是浮点的本质。并非所有的Long都可以精确地表示为Double。AS3在使用AMF序列化时支持JavaLong
和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)