2010-07-23 5 views
3

Comment mettre à l'échelle un nombre jusqu'à dix, cent, mille, etc.Augmentation d'un nombre

Ex.

num = 11 round up to 20 
num = 15 round up to 20 
num = 115 round up to 200 
num = 4334 round up to 5000 
+4

Quelle langue? S'il vous plaît poster le code que vous avez maintenant. Ce n'est pas www.do_my_homework_for_me.com –

Répondre

2

je suppose que cette formule pourrait fonctionner? Sauf si vous avez plus d'exemples à montrer.

power = floor(log10(n)) 
result = (floor(n/(10^power)) + 1) * 10^power 
+0

Cela ne fonctionnerait pas, si vous avez fait 15 il reviendrait pour résultat ((15/10) + 1) * 10 qui est 25 –

+0

@Rafe Kettler cela fonctionne si vous faites la division entière ou fais Math.Floor (15/10) – Arizona1911

+0

ouais, je voulais dire division entière. Il a été mis à jour pour être plus explicite. – CookieOfFortune

1

convertir le nombre en un nombre décimal (à savoir 11 va de 1,1 à, 115 passe à 1,15), puis prendre le plafond du numéro, puis le multiplier arrière. Exemple:

public static int roundByScale(int toRound) { 
    int scale = (int)Math.pow(10.0, Math.floor(Math.log10(toRound))); 
    double dec = toRound/scale; 
    int roundDec = (int)Math.ceil(dec); 
    return roundDec * scale; 
} 

Dans ce cas, si vous entrez 15, il sera divisé par 10 pour devenir 1,5, puis arrondi à 2, la méthode retourne 2 * 10 qui est 20.

+0

Ne fonctionne pas pour 10 ** n. – joel3000

+0

il fait maintenant .... –

1
import math 

exp = math.log10(num) 
exp = math.floor(exp) 
out = math.ceil(num/10**exp) 
out = out * 10**exp 
0
public static int ceilingHighestPlaceValue(int toCeil) 
{ 
    int placeValue = Math.Pow(10,toCeil.ToString().Length()-1); 
    double temp = toCeil/placeValue; 
    return= ceil(temp) * placeValue; 
} 
Questions connexes