2010-08-22 11 views
2

s'il vous plaît, n'importe qui m'aider à tronquer le nombre entier de nombre réel sans n'importe quel tour aux entiers les plus proches dans matlab, par exemple: si j'ai 255/64 = 3,98 j'ai besoin de 3 pas 4. J'ai utilisé correctif dans mon programme, mais ne fonctionne pas. ma morue est:trunc le nombre entier de nombre réel en utilisant matlab

S=imread('image0286.jpg')/64; 
    disp(fix(S); 

cela me donne la sortie après tour les éléments de S aux entiers les plus proches coupe pas le nombre entier.

Répondre

4

fix fait ce que vous voulez.

>>fix(255/64) 
    ans = 
      3 

peut-être qu'une autre partie de votre code ne fait pas ce que vous pensez qu'il est en train de faire. pouvez-vous poster plus de code et votre sortie attendue et réelle

EDIT: Imread renvoie les valeurs en tant que uint8, et la division dans cette classe semble effectuer l'arrondi que vous ne voulez pas. essayez refondre doubler avant de diviser

S = double(imread('image0286.jpg'))/64 
+0

Je dois réduire l'espace de couleur de 256 à 4 que je divise l'image après l'avoir lu par 64, quand j'essaye de calculer l'histogramme de couleur j'ai trouvé la couleur devenez 5 pas 4 parce qu'elle arrondit aux nombres entiers les plus proches. – zenab

+0

ok, pense que j'ai trouvé votre problème, voir edit – second

+0

+1 pour 'double'. – Jonas

0

floor(x) fait cela, méfiez-vous si des nombres négatifs.

mais fix devrait fonctionner aussi.

Notez également que imread peut renvoyer un tableau byte ou un tableau int au lieu de flotter. donc votre division peut être int-division, et automatiquement tronquer sans avoir besoin de fix ou floor.

+0

J'essaie le plancher dans mon programme aussi arrondi au nombre entier le plus proche, plrase que j'ai besoin d'obtenir par exemple: 3.1 = 3; 3,2 = 3; 3,5 = 3; 3,7 = 3; 3.9 = 3 – zenab

+0

Si c'est le cas, vous faites quelque chose de mal. s'il vous plaît nous montrer la sortie de 'S (1, :)'. peut-être que c'est déjà arrondi. –

Questions connexes