按照你的要求為不確定保留幾位小數(shù)的字符串做四舍五入的Java程序如下
創(chuàng)新互聯(lián)是一家專業(yè)提供南昌縣企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為南昌縣眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。
import java.math.BigDecimal;
public class A {
public static void main(String[] args) {
String s="0.00000999999997";
//四舍五入,length是小數(shù)位數(shù)
int length=s.substring(s.indexOf(".")+1).length();
String s1=String.format("%."+(length-1)+"f",new BigDecimal(s));
//去尾部0
BigDecimal bd=new BigDecimal(s1).stripTrailingZeros();
System.out.println(bd.toPlainString());
}
}
編程上四舍五入一般都是通過加一個小數(shù)看是否自動進1來完成的。
打個比方12.563,要求保留兩個小數(shù),四舍五入,則可以這樣做:
第一步:12.563+0.005=12.568
第二步:12.568*100=1256.8
第三步:對1256.8強制轉(zhuǎn)換為int類型(int)(1256.8)=1256
第四步:得出結(jié)果(double)(1256)/100=12.56
結(jié)果就是12.563保留兩個小數(shù)并四舍五入的結(jié)果為12.56
不同的變成語言也行寫法上不一樣,但總體的理論是一樣的。
使用String.format("%.2f",num); //num是要處理的數(shù)據(jù)
這種方法可以用float,double接收數(shù)據(jù)類型,我試了一下String接收好像會報錯,小伙伴也可以試一下。可以四舍五入保留兩位小數(shù),但是小數(shù)點第二位是0的話會不顯示。以下代碼用到此方法的語句:value.add(Double.valueOf ( String.format("%.2f", Double.valueOf(list.get(3).replace("\"", ""))*100)));
如果你是用來交差的,可以再聲明讓我們貼代碼,如果你是學習的,那么就探討一下
1.四舍五入時可以用到int類型,它的得到的是整數(shù),舍棄小數(shù)部分。
2.動腦筋想一些小辦法,四舍五入可以自己寫方法,不必用到API。
我們知道所謂四舍五入,就是滿5進一,假設(shè)這個數(shù)為A,若無法進一,那么他減去0.5,必然小于該數(shù)。能進一,必然大于等于該數(shù)。那么可不可以用下面的方法?
private int fun(double d) {
int b = (int) d;
if(d - 0.5 = b){
b++;
return b;
}
else
return b;
}
使用時調(diào)用就行了,如system.out(類實例.fun(5.2));
拋磚引玉,歡迎賜教(這個方法只是基本實現(xiàn),其他提問人慢慢摸索吧)
直接方法:math.round();取離數(shù)值最近值
方法如下:
double d; ?//d為需要四舍五入的浮點數(shù)
int i=(int)(d+0.5); //i為四舍五入后的整數(shù)
如果d小數(shù)點后的數(shù)是0~4,那么d+0.5之后小數(shù)點后的數(shù)是5~9,將其轉(zhuǎn)化為int,舍去小數(shù)點后的數(shù),只保留原先的整數(shù)部分
如果d小數(shù)點后的數(shù)是5~9,那么d+0.5之后小數(shù)點后的數(shù)是0~4,整數(shù)部分的個位數(shù)+1,將其轉(zhuǎn)化為int,舍去小數(shù)點后的數(shù),只保留+1之后的整數(shù)部分
以下是示例代碼:
方法一:四舍五入
double? f? =? 111231.5585;
BigDecimal? b = new BigDecimal(f);
double f1? =? b.setScale(2,? RoundingMode.HALF_UP).doubleValue();
方式二:
java.text.DecimalFormat df = new ? java.text.DecimalFormat("#.00");
df.format(你要格式化的數(shù)字);
方式三:
double d = 3.1415926;
String result = String .format("%.2f");
注意:%.2f %. 表示 小數(shù)點前任意位數(shù) ? 2 表示兩位小數(shù) 格式后的結(jié)果為f 表示浮點型。
方式四:
此外如果使用struts標簽做輸出的話,有個format屬性,設(shè)置為format="0.00"就是保留兩位小數(shù)例如:
fmt:formatNumber type="number" value="${10000.22/100}" maxFractionDigits="0"/