DecimalFormat と Math.round() という 2 つのメソッドが使用されています。
使用法:
1、DecimalFormat:(文字列 java.text.NumberFormat.format(double number) メソッド)
浮動小数点数 f = 0.5555f;
DecimalFormat df1 = new DecimalFormat(" #.00 "); //小数点以下 2 桁を予約します。十分の数の場合、小数点前の 0 は表示されず、小数点以下のゼロの数は予約されます。
df1.format(f);
# ビットが 0 の場合は表示する必要がないことを示し、0 はビットが 0 の場合でも表示されることを意味します。
関数の定義は次のとおりです。
そのため渡されるパラメータはdoubleであり、float(暗黙の変換)も渡すことができ、最終結果はString型となります。
2、Math.round():(int java.lang.Math.round(float a)メソッド)
浮動小数点数 f = 1.222f;
f = Math.round(f * 100 ) / 100 f; //100を掛けて100で割って浮動小数点型に変換
/** 乗算するときは小数点以下の桁数を維持します
** Math.round() メソッドは float 型を渡すことに注意してください。
*/
どちらの方法でも四捨五入されます。
浮動小数点型の場合は、Math.round メソッドを使用することをお勧めします。または、独自のニーズに応じてコードを DIY することもできます。
詳細な説明については、コードのコメントとコンソール出力を参照してください: (DecimalFloat の形式と Math.round 関数の実装ロジックを含む)
package testMap;
import java.text.DecimalFormat;
public class TestFloat {
public static void main(String[] args) {
// TODO Auto-generated method stub
//四舍五入保留两位
float f = 0.5555f;
//decimalFormat是将double类型数据转换为字符串,并进行格式化
//#表示这位如果是0则不必显示出来,0则表示这位如果是
//format函数:String java.text.NumberFormat.format(double number)
DecimalFormat df1 = new DecimalFormat("#.00");//首位0不显示出来,即0.1显示为 .1
DecimalFormat df2 = new DecimalFormat("0.00");//首位0显示出来,即0.1显示为 0.1
System.out.println("--------DecimalFormat----------");
System.out.println("df1==" + df1.format(f));
System.out.println("df2==" + df2.format(f));
System.out.println(df1.format(f).getClass());//String类型
System.out.println(Float.parseFloat(df1.format(f)));//转换为float类型
System.out.println(String.valueOf(df1.format(f)));
// System.out.println(Float.toString(df1.format(f)));//转换为String类型
f = 0.595f;
//Math.round()方法是将浮点类型数据 乘以10的多少次方 ,取整,然后 + 0.5 除以10的多少次方,取小数点后多少位
// 如乘以1000 则取小数点后3位
System.out.println("---------Math.round()----------");
System.out.println(Math.round(f * 100) / 100f);//四舍五入后如果末尾是0,自动省略,不显示
// System.out.println(df1.format("1.2"));//参数必须是数值型String java.text.NumberFormat.format(double number)
System.out.println(Float.toString(f));//转换为String输出效果
System.out.println(Float.toString(f));//转换为String输出效果
System.out.println("-----------Math.round()的正数非特殊值实现逻辑--------------");
f = 11.115111f;
int b = (int) (f * 100 + 0.5);
float a = b / 100f;
System.out.println("a==" + a);
System.out.println((int)(f * 100 + 0.5) / 100f);
f = -12.115f;
System.out.println("负数" + Math.round(f * 100) / 100f);
f = -12.116f;
System.out.println("负数" + Math.round(f * 100) / 100f);
System.out.println("-------Math.round()的负数非特殊值实现逻辑--------");
int c = (int) (f * 100 - 0.5);
float d = c / 100f;
System.out.println("d==" + d);
System.out.println((int)(d * 100 - 0.5) / 100f);
}
}
コンソール出力:
以下のスクリーンショット:
----以下はコンソール出力です-----(上と同じですが、画像が失われる恐れがあります)
--------DecimalFormat----------
df1==.56
df2==0.56
class java.lang.String
0.56
.56
---------Math.round( )----------
0.6
0.595
0.595
-----------Math.round() 正の非特殊値実装ロジック ------------ - -
a==11.12
11.12
Negative Number-12.11
Negative Number-12.12
-------Math.round() の負の非特殊値実装ロジック --------
d==-12.12
-12.12
ちなみに、 NumberFormat.format() のコードを貼り付けます。
/**
* Specialization of format.
*
* @param number the double number to format
* @return the formatted String
* @exception ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @see java.text.Format#format
*/
public final String format(double number) {
// Use fast-path for double result if that works
String result = fastFormat(number);
if (result != null)
return result;
return format(number, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
}