Skip to content

java float double precision

landon edited this page Aug 27, 2018 · 1 revision

关于math#double#float的精度说明

  • 输出测试
// 输出8056.0
System.out.println(7600 * 1.06);
// 输出8055.9995
System.out.println(7600 * 1.06f);
// 输出1.0599999E7
System.out.println(10000000 * 1.06f);
// 输出1.06E7
System.out.println(10000000 * 1.06);

7.22 - 7.0 = 0.21999999999999975
7.22f - 7.0f = 0.21999979
4.8 / 6 = 0.7999999999999999

// 输出为true 这也从侧面反映了上面的计算,因为默认的double精度高一些
// 7600 * 1.06计算出来的值更接近于8056
double d1 = 8055.99999999999999999;
double d2 = 8056.0;
System.out.println(d1 == d2);
1.06#32bit#fraction:1.00001111010111000010100
1.06#64bit#fraction:1.0000111101011100001010001111010111000010100011110110
  • 其他
游戏内会碰到一种需求, 就是客户端试穿装备,来回来去拖拽调整,这时候并不需要请求服务器
或者技能下级预览需求,这两种情况都是客户端通过公式计算的
因此存在客户端,服务器计算结果不一致的情况。
当时调了很多次,过程确实很痛苦。
程序对应,也可以规避掉小数,比如把数值乘以10000之类的
这个要看策划要求,看他们要求精度多少
Clone this wiki locally