中易网

Java中,当的数据过大时,如何避免值的改变?

答案:4  悬赏:20  
解决时间 2021-02-19 03:41
public static void main(String []args)
{
DecimalFormat df = new DecimalFormat("#0.00");
BigDecimal bigDecimal = new BigDecimal(123456788.66f);
System.out.println("bigDecimal:"+df.format(bigDecimal));

DecimalFormat df2 = new DecimalFormat("#0.00");
float flo = new Float(1234567.54).floatValue();
System.out.println("flo:"+df2.format(flo));

float floo = 123456789f;
System.out.println("floo:"+floo);
}

打印结果为:
bigDecimal:123456792.00
flo:1234567.50
floo:1.23456792E8
请问如何取的实际值?
最佳答案
用double型
全部回答
这个地方会出现精度的问题,原因是二进制浮点数没有办法表示所有的小数。 BigDecimal bigDecimal = new BigDecimal(123456788.66f); 这一句你不要使用BigDecimal(123456788.66f)这种构造方法, 使用BigDecimal("123456788.66")构造方法便能得到正确结果。 下面类似。 总结:一般财务或者银行系统用来进行货币计算会常常遇到这种问题,解决的办法两种,一种就是运用BigDecimal ,但是效率似乎不高,还有一种就是用分作单位,这样就能用long来表示,就不会出现精度问题。
java和c﹢﹢不一样 在c中可以定义同名的局部及全局变量 在java中就不可以 因此你引用是不能成功的 因为在java中的局部变量会被垃圾回收器清理 所以你只能在外部将实参设置成全局 通过在方法内改变形参后再赋值给实参就ok了
1.23456792E8 不是数值变了 而是表达式不同 1.23456792E8 就是 1.23456792 * 10的8次幂 计算器也是这样表示的!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求App Store日本账号!
找一首英文歌 女生唱的 pulb pulb love me
三星note8的spen和note5的SPen有什么区别
sin10分之11π 用诱导公式怎么算
大众CC和大众迈腾差距大吗?
mysql 数据类型varchar 最长有多少
天津西站到天津南站地铁怎么走
欧美监狱电影,酷帅的那种,男主是监狱里老大
手机服务密码是什么?知道的回答
梅花鹿喝起了水。(扩句)
钢琴柒的制做方法。
我要剪蓬松一点的发型怎么跟理发师说
强夯法处理地基后对原标高一下的土有什么影响
优居房地产在哪里啊,我有事要去这个地方
对新进的员工进行培训,可以采用什么形式的?
推荐资讯
君度服装制造在哪里啊,我有事要去这个地方
广西是不是资本运作的试点地
钢院小区南门地址在哪,我要去那里办事
我的车09现代悦动自动带天窗,车已翻了整个车
三国志11游戏拼音输入法问题
有说知道海贼王中,多弗朗明哥在漫画出场的具
从郑州到云台山怎么走,火车还是汽车,要多长时
这个开紫花的是什么?
雁荡山景区可以野外自助烧烤吗
沙发深蹲每天做几组
乙二醇和马来酸酐能反应吗
方经睦纬药店地址在什么地方,想过去办事
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?