16 Temmuz 2020 Perşembe

Double Sınıfı

constructor
Java 9'dan itibaren bu metod deprecate edilor. Double.valueOf() kullanılmalı. Açıklaması şöyle
The static factory valueOf(double) is generally a better choice, as it is likely to yield significantly better space and time performance.
doubleToLongBits metodu
Şöyle yaparız.
Double.doubleToLongBits(1504642224.94664);
intValue metodu
Double değerin int'e cast etmekle aynıdır. Metodun içi şöyle
public int intValue() {
  return (int)value;
}
isFinite metodu
Metodun içi şöyle
public static boolean isFinite(double d) {
  return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}
MAX_VALUE Alanı
Şöyle yaparız.
double i = Double.MAX_VALUE;
MIN_VALUE Alanı
Sanılanın aksine en küçük eksi sayısı vermez. En küçük artı sayısı verir.

NaN Alanı
Sonsuz döngü kurmak için şöyle yaparız.
double i = Double.NaN;
while (i != i) {}
parseDouble metodu - string
Bu metod da Double.valueOf() metodu gibi Locale sensitive değildir. Türkçe string'i parse edemez.

Örnek
Şöyle yaparız.
String str = ...;
try {
  double d = Double.parseDouble(str);
} catch(NumberFormatException nfe) {
  ...
}
Bilimsel yani scientific gösterim şöyledir.
3564e-8 //returns 0.00003564
Örnek
Scientific notation ile belirtilen bir string'i parse edebilir. Şöyle yaparız.
double d = Double.parseDouble("4.30000000e01");
Örnek
Şöyle yaparız.
double d = Double.valueOf("4.30000000e+01");
POSITIVE_INIFINITY Alanı
Sonsuz döngü kurmak için şöyle yaparız.
double i = Double.POSITIVE_INFINITY;
while (i == i + 1) {}
toString metodu
Örnek
Açıklaması şöyle. Derleyici kodu yukar yuvarlar.
… If the precision is less than the number of digits which would appear after the decimal point in the string returned by Float.toString(float) or Double.toString(double) respectively, then the value will be rounded using the round half up algorithm. Otherwise, zeros may be appended to reach the precision…
Elimizde şöyle bir kod olsun. Çıktı olarak  0.64469688 alırız.
import java.lang.Math;
public class RoundExample{
  public static void main(String[] args){
    System.out.println(String.format("%10.8f",0.644696875));
  }
}
Derleyici koddaki sayıyı 8 tane ondalık haneye çevirmek için yukarı yuvarlar.
Eğer aynı kodu C ile deneseydik çıktı olarak 0.64469687alırız. GNU C derleyicisi en yakın integer'a çevirmeyi terchi ediyor.
#include <stdio.h>

int main()
{
    printf("%10.8f", 0.644696875); //double to string
    return 0;
}
Örnek
Scientific notation kullanabilir. Açıklaması şöyle
Double.toString() or System.out.println or FloatingDecimal.toJavaFormatString uses scientific notations if double is less than 10^-3 or greater than or equal to 10^7
Görmek için şöyle yaparız.
double myValue = 0.00000021d;
String.format("%s", myvalue); //output: 2.1E-7
Çözmek için şöyle yaparız.
double myValue = 0.00000021d;

DecimalFormat df = new DecimalFormat("0",
  DecimalFormatSymbols.getInstance(Locale.ENGLISH));
df.setMaximumFractionDigits(340); //340 = DecimalFormat.DOUBLE_FRACTION_DIGITS

System.out.println(df.format(myValue)); //output: 0.00000021
valueOf metodu
Açıklaması şöyle. Türkçe string'i parse edemez.
Double.valueOf() is not Locale aware. It only understands numbers with dots as decimal places.
Açıklaması şöyle.
To interpret localized string representations of a floating-point value, use subclasses of NumberFormat.
Metodun içi şöyle
public static Double valueOf(double d) {
  return new Double(d);
}
Bu metod new Double(...) çağrısına tercih edilmeli.

Örnek
Şu kod exception fırlatır.
Double.valueOf("12,3");
Bu kod yerine NumberFormat kullanılır. Şöyle yaparız.
NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);

System.out.println(format.format(12.3));   // ==> "12,3"
System.out.println(format.parse("12,3"));  // ==> 12.3

Hiç yorum yok:

Yorum Gönder