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);
}
ダブルをフロートにキャストするだけです。
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
データベースにBigDecimal型として保存されている値を取得することをお勧めします。
BigDecimal number = new BigDecimal("2.3423424666767E13");
int myInt = number.intValue();
double myDouble = number.doubleValue();
// your purpose
float myFloat = number.floatValue();
BigDecimalは多くの機能を提供します。
Double
をFloat
に変換
public static Float convertToFloat(Double doubleValue) {
return doubleValue == null ? null : doubleValue.floatValue();
}
double
をFloat
に変換
public static Float convertToFloat(double doubleValue) {
return (float) doubleValue;
}
「2.3423424666767E13を23423424666767に変換する方法」に関する質問に回答するには
decimal formatter を使用して、10進数をフォーマットできます。
double d = 2.3423424666767E13;
DecimalFormat decimalFormat = new DecimalFormat("#");
System.out.println(decimalFormat.format(d));
出力:23423424666767
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;
まず、データベースの値がfloatであるということは、Java float
にも適合するという意味ではありません。 Floatはfloating pointの略で、さまざまな精度の浮動小数点型が存在します。 Java型float
およびdouble
は、どちらも精度の異なる浮動小数点型です。データベースでは、両方ともFLOAT
と呼ばれます。 double
はfloat
よりも精度が高いため、精度を失う可能性があるため、値をfloat
にキャストすることをお勧めしますnot。
任意の精度の数値を表すBigDecimal
も使用できます。
問題は、単精度浮動小数点型で値を正確に保存できないことです。証明:
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つの異なるものです。上記の例は、数値を浮動小数点数として印刷する方法を示しています。これにより、取得する科学表記法を回避できます。
DataTypeキャストを使用します。例えば:
// converting from double to float:
double someValue;
// cast someValue to float!
float newValue = (float)someValue;
乾杯!
注意:
整数は整数です。 10、400、または-5。
浮動小数点数(float)には、小数点と小数点以下の桁があります(12.5、56.7786543など)。
倍精度は、標準の浮動小数点数よりも精度が高い特定の種類の浮動小数点数です(つまり、小数点以下の桁数が正確であることを意味します)。