java里强制类型转换导致的精度损失问题.

floatf;doubleg=123456789.123456789;f=(float)g;1输出的f是1.23456792E8求解释8怎么没了?9后面为什么是2... float f;
double g=123456789.123456789;
f=(float)g;
1 输出的f是1.23456792E8 求解释 8怎么没了?9后面为什么是2
展开
 我来答
路飞滴飞
推荐于2017-09-05 · 超过20用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:41.2万
展开全部

double 和 float 的区猜漏别是double精度高,有效数字16位,float精度穗局烂7位。你看下面的运行结果,double型的g输出得结果,小数位7后的8也没了,因为超出了double型的有效位数。同理float型的f输出后7后面的数腊顷字超出了精度范围,没有任何意义了。

jamxval
2014-12-03 · TA获得超过6822个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1420万
展开全部
float 只有6个小数弯汪颂位是有意义的,陵态再后面的无意义,可能是任何东西。小数的表示法是 IEEE754 这种规则中确立的,对于像 1/3 这种无限小数,或无法被2整除的东西转换成2进制时都会可能有些不精确的地方,这个直接使埋郑用原始的办法是无法避免的,需要专门的针对数学运算的其它 API 来解决。

不过不清楚怎么不直接显示出来而要转换成 E 的表示法(这样平白弄出个小数位的问题来)。

在 Java 中如果你打算处理数字的运算,应该用 java.math.BigDecimal,不要直接使用基本数据类型。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式