2011-08-25 18 views
20

dönen Ve yöntemleri math.ceil ve Math.floor kullanarak ve bu yöntemlerin benim çift ayrıştırma, ben aynı değeri iade olsun ben, 23 ...math.ceil ve Math.floor ben <p>çift (23,46)</p> sahip aynı değeri

24'e yuvarlatılmasını istiyorum .. Diğer kelimelerde, 15.01'lik bir double'ım varsa, hala 16'ya yuvarlanmalı ... Bunu nasıl yaparım? ?

+5

Eğer math.ceil (23.46) = 23 nasıl aldığını gösteren tekrarlanabilir kod sonrası Lütfen? – smci

+0

bu soruyla ilgili bir şekilde, tavan ve kat, çift hassasiyeti kaybederse aynı değeri basabilir, örneğin System.out.println ("ceil:" + Math.ceil ((1000000000000000000L - 1)/2.0)); System.out.println ("kat:" + Math.floor ((1000000000000000000L - 1)/2.0)); her ikisi de 5.0E17 alacaktır. – Deep

cevap

49

açılamıyor:

public class Test 
{ 
    public static void main(String[] args) 
    { 
     System.out.println(Math.ceil(23.46)); // Prints 24 
     System.out.println(Math.floor(23.46)); // Prints 23 
    } 
} 

ben şüpheli ya size veya sen olduğunu düşündüğünü çıktı verilerini yazmıyorsun var giriş verilerini yok. Math.floor/ceil kendileri iyi çalışıyor. Aynı değeri döndürecekleri zaman, girdinin zaten bir tamsayı olduğu zamandır. Senin çiftin ayrıştırma hakkında hakkında konuşuyorsun ... Benim hatam orada yatar. Lütfen sorunu gösteren kısa ama eksiksiz bir program gösteriniz.

(Orada kesin hedef tamsayı tam bir double olarak temsil edilemez çok büyük değerler etrafında diğer senaryolar olabilir - Kontrol etmedim - ama bu burada kesinlikle böyle değil.) Kodu

+5

"Aynı değer dönecekleri zamanlar, zaten girdi bir tamsayı olduğunda" Bu sorun benim sorunum oldu. Benim tarafımdaki aptal hata, yardımın için teşekkürler. – Tiwaz89

3

Ben

System.out.println(Math.ceil(23.46)); 
System.out.println(Math.ceil(15.01)); 

Ben

24.0 
16.0 

istediğin bu değil mi olsun çalıştırdığınızda? çoğaltmak

4

beklendiği gibi

24.0 
23.0 

Yani çalışıyor:

System.out.println(Math.ceil(23.46)); 
System.out.println(Math.floor(23.46)); 

bana aşağıdaki çıktıyı verir.

3

Asıl çağrıyı nasıl yapıyorsunuz? İkili nesneyi veya ilkel türünü kullanarak sonucunuzu kopyalayamıyorum.

Bu kod:

Double d_object = new Double(23.46); 
    double d_simple = 23.46; 

    System.out.println("Ceiling simple: " + Math.ceil(d_simple)); 
    System.out.println("Floor simple: " + Math.floor(d_simple)); 

    System.out.println("Ceiling object: " + Math.ceil(d_object)); 
    System.out.println("Floor object: " + Math.floor(d_object)); 

bana verir:

Ceiling simple: 24.0 
Floor simple: 23.0 
Ceiling object: 24.0 
Floor object: 23.0 
13
float x = ((float)2346/100); // You should type cast. Otherwise results 23 
Math.ceil(x);     // So Math.ceil(23) is 23 !!! 
           // Here I type cast to float. 
           // So I get the result 24 
İlgili konular