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
请问如何取的实际值?
Java中,当的数据过大时,如何避免值的改变?
答案:4 悬赏:20
解决时间 2021-02-19 03:41
- 提问者网友:我稀罕你
- 2021-02-18 09:20
最佳答案
- 二级知识专家网友:你把微笑给了谁
- 2021-02-18 10:36
用double型
全部回答
- 1楼网友:抱不住太阳的深海
- 2021-02-18 12:56
这个地方会出现精度的问题,原因是二进制浮点数没有办法表示所有的小数。
BigDecimal bigDecimal = new BigDecimal(123456788.66f);
这一句你不要使用BigDecimal(123456788.66f)这种构造方法,
使用BigDecimal("123456788.66")构造方法便能得到正确结果。
下面类似。
总结:一般财务或者银行系统用来进行货币计算会常常遇到这种问题,解决的办法两种,一种就是运用BigDecimal ,但是效率似乎不高,还有一种就是用分作单位,这样就能用long来表示,就不会出现精度问题。
- 2楼网友:走,耍流氓去
- 2021-02-18 12:12
java和c﹢﹢不一样 在c中可以定义同名的局部及全局变量 在java中就不可以 因此你引用是不能成功的 因为在java中的局部变量会被垃圾回收器清理 所以你只能在外部将实参设置成全局 通过在方法内改变形参后再赋值给实参就ok了
- 3楼网友:努力只為明天
- 2021-02-18 11:38
1.23456792E8
不是数值变了 而是表达式不同
1.23456792E8 就是 1.23456792 * 10的8次幂
计算器也是这样表示的!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯