web-dev-qa-db-ja.com

Javaでdoubleをfloatに変換します

doubleからfloatへの変換に関連する問題に直面しています。実際、データベースにはfloat型23423424666767を格納していますが、以下のコードgetInfoValueNumeric()でデータベースからデータを取得すると、double型になります。取得する値は2.3423424666767E13形式です。

では、どのようにして23423424666767のようなfloat形式のデータを取得しますか?

2.3423424666767E13 to 23423424666767

public void setInfoValueNumeric(Java.lang.Double value) {
    setValue(4, value);
}


@javax.persistence.Column(name = "InfoValueNumeric", precision = 53)
public Java.lang.Double getInfoValueNumeric() {
    return (Java.lang.Double) getValue(4);
}
54
Sitansu

ダブルをフロートにキャストするだけです。

double d = getInfoValueNumeric();
float f = (float)d;

また、プリミティブ型は無限の数のセットを格納できないことに注意してください。

float range: from 1.40129846432481707e-45 to 3.40282346638528860e+38
double range: from 1.7e–308 to 1.7e+308
146
Tom Wellbrock

データベースにBigDecimal型として保存されている値を取得することをお勧めします。

BigDecimal number = new BigDecimal("2.3423424666767E13");

int myInt = number.intValue();
double myDouble = number.doubleValue();

// your purpose
float myFloat = number.floatValue();

BigDecimalは多くの機能を提供します。

23
antoniodvr

DoubleFloatに変換

public static Float convertToFloat(Double doubleValue) {
    return doubleValue == null ? null : doubleValue.floatValue();
}

doubleFloatに変換

public static Float convertToFloat(double doubleValue) {
    return (float) doubleValue;
}
12
Phan Van Linh

「2.3423424666767E13を23423424666767に変換する方法」に関する質問に回答するには

decimal formatter を使用して、10進数をフォーマットできます。

     double d = 2.3423424666767E13;
     DecimalFormat decimalFormat = new DecimalFormat("#");
     System.out.println(decimalFormat.format(d));

出力:23423424666767

3

Doubleからfloatへの変換は、縮小変換になります。 doc から:

縮小プリミティブ変換は、数値の全体的な大きさに関する情報を失う可能性があり、精度と範囲を失う可能性もあります。

Doubleからfloatへの縮小プリミティブ変換は、IEEE 754の丸め規則(§4.2.4)によって管理されます。この変換では精度が失われる可能性がありますが、範囲も失われるため、ゼロ以外のdoubleからfloat 0、有限doubleからfloat infinityが発生します。 double NaNはfloat NaNに変換され、double infinityは同じ符号付きfloat infinityに変換されます。

したがって、それは良い考えではありません。それでも必要な場合は、次のようにすることができます:

double d = 3.0;
float f = (float) d;
1
i_am_zero

まず、データベースの値がfloatであるということは、Java floatにも適合するという意味ではありません。 Floatはfloating pointの略で、さまざまな精度の浮動小数点型が存在します。 Java型floatおよびdoubleは、どちらも精度の異なる浮動小数点型です。データベースでは、両方ともFLOATと呼ばれます。 doublefloatよりも精度が高いため、精度を失う可能性があるため、値をfloatにキャストすることをお勧めしますnot

任意の精度の数値を表すBigDecimalも使用できます。

0
Hoopje

問題は、単精度浮動小数点型で値を正確に保存できないことです。証明:

public class test{
    public static void main(String[] args){
        Float a = Float.valueOf("23423424666767");
        System.out.printf("%f\n", a); //23423424135168,000000
        System.out.println(a);        //2.34234241E13
    }
}

もう1つは、「2.3423424666767E13」というメッセージは表示されず、メモリに格納された数値の視覚的な表示にすぎないということです。 「印刷方法」と「メモリ内の内容」は、2つの異なるものです。上記の例は、数値を浮動小数点数として印刷する方法を示しています。これにより、取得する科学表記法を回避できます。

0
piezol

DataTypeキャストを使用します。例えば:

// converting from double to float:
double someValue;
// cast someValue to float!
float newValue = (float)someValue;

乾杯!

注意:

整数は整数です。 10、400、または-5。

浮動小数点数(float)には、小数点と小数点以下の桁があります(12.5、56.7786543など)。

倍精度は、標準の浮動小数点数よりも精度が高い特定の種類の浮動小数点数です(つまり、小数点以下の桁数が正確であることを意味します)。

0
wpmoradi