SORU
14 EKİM 2008, Salı


yuvarlama basamak sayısı rasgele bir dizi

Ne kadar yuvarlak olabilirherhangi birsayı (tamsayı >0) N anlamlı basamak?

Eğer 3 önemli basamak yuvarlamak istiyorum, örneğin, sürebilir bir formül arıyorum:

1,239,451 ve iade 1,240,000

12.1257 ve iade 12.1

.0681 ve iade .0681

Ve dönüş 5 5

Doğal olarak algoritma kodlanmış sadece bir başlangıç olur, ancak 3, N ele olmamalıdır.

CEVAP
17 EKİM 2009, CUMARTESİ


İşte diğer cevapları 12.100000000000001 hata olmadan Java ile aynı kod

Ben de tekrarlanan kod kaldırıldı, bir tür n - d bittiğinde kayan sorunları önlemek için tamsayı için power değişti, ve uzun bir ara daha açıkça ortaya koydu

Böcek küçük bir sayı ile çok sayıda çoğalmasına neden oldu. Bunun yerine aynı boyda iki sayı ürettim.

EDİT
Daha fazla hatalar düzeltildi. NaN gibi 0 için kontrol eklendi. İşlevi aslında negatif sayılar (orijinal kodu negatif bir sayının bir günlük bir karmaşık sayı olduğu için negatif sayıları ele vermez) çalışması yaptı

public static double roundToSignificantFigures(double num, int n) {
    if(num == 0) {
        return 0;
    }

    final double d = Math.ceil(Math.log10(num < 0 ? -num: num));
    final int power = n - (int) d;

    final double magnitude = Math.pow(10, power);
    final long shifted = Math.round(num*magnitude);
    return shifted/magnitude;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Harvest: Greg Laurie

    Harvest: Gre

    6 HAZİRAN 2006
  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006
  • RogerBuckChrist

    RogerBuckChr

    9 Temmuz 2011