标签:
最近做一款挂机游戏,碰到了一个问题,游戏中玩家攻击力会不断增加,从K增加到M到B到T,然后aa,bb,cc……
这样就出现了一个问题,我该如何存储玩家的攻击力,乍看之下double型的长度好像也不够了。
我最开始想到的方法是把数值和单位分开,设计一个新的类型来处理,但发现使用起来非常不方便,除非实现大量的功能。
后来找到了一个比较好的办法——用科学计数法来初始化double。
假设玩家当前攻击力是1.08 * 10 ^ 120, 如果试图通过下面这种方式来初始化,使用时就会发现CurrentDps是infinite
double CurrentDps = 1.08f * math.pow(10, 120); (错误)
但是使用下面这种方式就没问题了
double CurrentDps = 1.08E+120; (正确)
而且这样初始化后的CurrentDps是可以正确的和其他科学技术法表示的double进行运算的,这样一来问题就解决了,无论攻击力在什么量级,都使用科学技术法来初始化和运算,最后显示到屏幕上的时候,再通过自己写的一个方法,转换成当前数值你希望显示的单位。
另外有一点要注意,由于double型本身能表示的最大范围是E308,所以如果你的数值会超过这个值,那么这个方法也就不适用了,只能想别的办法来解决了。
标签:
原文地址:http://www.cnblogs.com/Hypnus/p/4410409.html