永发信息网

java中float类型保留2位小数,第3位值>0就向第二位进1 怎样实现?

答案:4  悬赏:0  手机版
解决时间 2021-11-28 06:30
java中float类型保留2位小数,第3位值>0就向第二位进1 怎样实现?
最佳答案
可以直接通过判断第三位的值,如果第三位乘以1000,之后对10求余,如果大于0,直接给第二位加上一个值“10”,在除以1000即可。
float f1 = 3.222f;
int num = (int) (f1 * 1000);
if (num % 10 > 0)
f1 = (num -num % 10 + 10 * 1.0f) / 1000.0f;
else
f 1= num * 1.0f / 1000.0f;
System.out.println(f);
输出结果:3.23.
全部回答
你把float转为string 然后通过字符串截取到第三位小数,然后进行计算。
可以采用Math工具类中的round()方法来实现:
float f = (float)(Math.round(f*100))/100;

不知道java有没有提供方法,不过可以自己实现

float f = 2.12034f;
int a = (int) (f * 1000);
if (a % 10 > 0)
    f = (a - a % 10 + 10 * 1.0f) / 1000.0f;
else
    f = a * 1.0f / 1000.0f;
System.out.println(f);

代码已经测试过,根据你自己的需求完善吧

思路是:

一、先把float乘以1000,将小数点后移动三位,然后强转为int,把不需要的(float小数点三位后的)数全部去掉

二、判断小数点第三位是否为0,也就是强转得到的int的最后一位是否为0,将int%10判断是否为0

三、如果小数点后第三位为0,就对int加上10,也就是向前进一位,然后int要将最后一位减去,int-int%10,这样,就得到了进位后的数,将这个数除以1000,就得到最终的需求


表达好像有点乱的样子,楼主慢慢看啦。。。求个采纳哦,进5044群5871

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求助大神,我用bat批量导入ad域用户时出错
林如海为何送林黛玉去贾府,而不是留在自己身
6222****2856我要怎么才能得知我中间的数字,
香港有卖nordic natural 吗
一下几款价位差不多的耳机哪款合适求推荐!!
人体除下列哪种结构外,几乎所有组织、器官都
柳州九十二路公交车所到的站有
如何种植爬山虎和金银花
自己的嫂子一直看不起我,我该怎么办
加普威打印机怎么装快递单的驱动
iOS用户可以下载苹果的APP store吗?怎么下载
从七楼跳下去会不会死?
在出使赵国游说赵王这件事上甘罗是如何成功的
为什么一打仗石油就涨
DNF固伤职业有哪些,起源版本后.大佬帮忙分
推荐资讯
到底什么是衍生金融资产和非衍生金融资产啊?
8000除以125用商不变的规律来计算?
耳机盲求助,N3AP究竟怎么样
54.6×2.4+76×5.46巧算
1994年4月14日出生的人有怎样的命运?
vivo有专门负责系统的工程师吗
c++中能把数组传入到函数中吗,为什么?
袖口罗纹部分全部加入弹力丝吗?还是只有前端
决战英雄城电视直播吗
兴义到思南有多少公里
刑法里面有一条,父母打死子女,只用坐俩年牢
什么叫瑞士银行本票?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?