JavaA2Z

KAB-studio > プログラミング > JavaA2Z > floatとは

float

日本語 単精度浮動小数点型
英語 floating point
ふりがな ふろーと
フリガナ フロート

解説

プリミティブ型のひとつ。
 
実数値を格納するための
ラッパークラスFloatクラス
 
「1.5」のような、小数点を含む数を格納するための
32ビット(4バイト)の情報量を持ち、浮動小数点形式で実数を格納する。
32ビットの内訳は以下の通り(左端のビットを「0ビット目」とする)。
 
・0ビット目:符号
・1ビット目~8ビット目:指数部
・9ビット目~31ビット目:仮数部

それぞれの意味については「浮動小数点」「指数部」「仮数部」の項目を参照
 
float浮動小数点リテラルの値を格納する際に、そのまま代入しようとするとコンパイルエラーになる。
これは、浮動小数点リテラルdoubleだからである。
浮動小数点リテラルをfloatにするには、末尾に「F」もしくは「f」を付ける。詳しくは「F」の項目を参照
 
正の最大値は「3.4028235*10の38乗」、正の最小値は「1.4*10の-45乗」となる。ただしこれらは、指数部仮数部それぞれの「表現できる最大の値・最小の値」である。
また、これらは共に「正の~」であり、0ビット目の符号を1にすれば、どちらもマイナスの値となる。
 
浮動小数点の性質上、値によっては誤差が生まれる。
金額の計算等、正確な実数値が必要な場合にはBigDecimalクラスの使用を勧める。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.text.DecimalFormat;

public class Sample
{
    public static void main( String[] args )
    {
        // float型の変数宣言します。実数値「2.5」を格納します。
        float f;
        // メモリ上に32ビットの領域が確保されました。

        // この変数に実数値2.5を格納します。
        // 浮動小数点リテラルはそのままだとdouble型になるので、
        // float型にするため末尾に「F」を付けます。
        f = 2.5F;
        // それを出力します。
        System.out.println( f );
        // 2.5

        // float型変数に格納された「2.5」がどのように
        // ビットとして格納されているか見てみます。
        outputFloatBit( f );
        // 0 10000000 01000000000000000000000
        // ↑    ↑               ↑
        // 符号 指数部          仮数部

        // 詳しくは「浮動小数点」「指数部」「仮数部」の項目を
        // ご覧ください。

        // 正の最大値と正の最小値はFloatクラスのstaticフィールド
        // として宣言されているのでそれを使いましょう。
        f = Float.MAX_VALUE;
        System.out.println( f );
        DecimalFormat decimalFormat = new DecimalFormat( "0.0" );
        System.out.println( decimalFormat.format( f ) );
        outputFloatBit( f );
        // 3.4028235E38
        // 340282346638528860000000000000000000000.0
        // 0 11111110 11111111111111111111111

        f = Float.MIN_VALUE;
        System.out.println( f );
        decimalFormat = new DecimalFormat( "0.0000000000000000000000000000000000000000000000000000000000000" );
        System.out.println( decimalFormat.format( f ) );
        outputFloatBit( f );
        // 1.4E-45
        // 0.0000000000000000000000000000000000000000000014012984643248170
        // 0 00000000 00000000000000000000001

        // ただし、ビットを見れば分かりますがどちらも「指数部と仮数部、
        // それぞれ取りうる値」としての最大値と最小値です。正負は最初の
        // ビットだけで決まるので、マイナスにすれば「負の~」となります。

        // float型は浮動小数点なので、誤差には気を付けてください。
        float f1 = 4.1F;
        float f2 = 8.2F;
        System.out.println( f1 + f2 );
        // 12.299999999999999

        // このように、簡単に誤差が生じます。
        // 正確な値が必要な場合にはBigDecimalクラスを使用しましょう。
    }

    /**
     * float型変数をビット形式で出力します。
     */
    private static void outputFloatBit( float f )
    {
        // float型変数をビット形式で文字列化します。
        String source = Integer.toBinaryString( Float.floatToIntBits( f ) );
        // 左0埋めします。
        StringBuffer strbuf = new StringBuffer();
        forint iF1 = source.length(); iF1 < 32; ++iF1 )
        {
            strbuf.append( "0" );
        }
        strbuf.append( source );
        // 符号、仮数部、指数部の間にスペースを入れます。
        strbuf.insert( 9, " " );
        strbuf.insert( 1, " " );

        System.out.println( strbuf.toString() );
    }
}
// Sample.java
import java.text.DecimalFormat;

public class Sample
{
    public static void main( String[] args )
    {
        // float型の変数宣言します。実数値「2.5」を格納します。
        float f;
        // メモリ上に32ビットの領域が確保されました。

        // この変数に実数値2.5を格納します。
        // 浮動小数点リテラルはそのままだとdouble型になるので、
        // float型にするため末尾に「F」を付けます。
        f = 2.5F;
        // それを出力します。
        System.out.println( f );
        // 2.5

        // float型変数に格納された「2.5」がどのように
        // ビットとして格納されているか見てみます。
        outputFloatBit( f );
        // 0 10000000 01000000000000000000000
        // ↑    ↑               ↑
        // 符号 指数部          仮数部

        // 詳しくは「浮動小数点」「指数部」「仮数部」の項目を
        // ご覧ください。

        // 正の最大値と正の最小値はFloatクラスのstaticフィールド
        // として宣言されているのでそれを使いましょう。
        f = Float.MAX_VALUE;
        System.out.println( f );
        DecimalFormat decimalFormat = new DecimalFormat( "0.0" );
        System.out.println( decimalFormat.format( f ) );
        outputFloatBit( f );
        // 3.4028235E38
        // 340282346638528860000000000000000000000.0
        // 0 11111110 11111111111111111111111

        f = Float.MIN_VALUE;
        System.out.println( f );
        decimalFormat = new DecimalFormat( "0.0000000000000000000000000000000000000000000000000000000000000" );
        System.out.println( decimalFormat.format( f ) );
        outputFloatBit( f );
        // 1.4E-45
        // 0.0000000000000000000000000000000000000000000014012984643248170
        // 0 00000000 00000000000000000000001

        // ただし、ビットを見れば分かりますがどちらも「指数部と仮数部、
        // それぞれ取りうる値」としての最大値と最小値です。正負は最初の
        // ビットだけで決まるので、マイナスにすれば「負の~」となります。

        // float型は浮動小数点なので、誤差には気を付けてください。
        float f1 = 4.1F;
        float f2 = 8.2F;
        System.out.println( f1 + f2 );
        // 12.299999999999999

        // このように、簡単に誤差が生じます。
        // 正確な値が必要な場合にはBigDecimalクラスを使用しましょう。
    }

    /**
     * float型変数をビット形式で出力します。
     */
    private static void outputFloatBit( float f )
    {
        // float型変数をビット形式で文字列化します。
        String source = Integer.toBinaryString( Float.floatToIntBits( f ) );
        // 左0埋めします。
        StringBuffer strbuf = new StringBuffer();
        for( int iF1 = source.length(); iF1 < 32; ++iF1 )
        {
            strbuf.append( "0" );
        }
        strbuf.append( source );
        // 符号、仮数部、指数部の間にスペースを入れます。
        strbuf.insert( 9, " " );
        strbuf.insert( 1, " " );

        System.out.println( strbuf.toString() );
    }
}

この単語を含むページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2010/04/13
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。