Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

reste d'une divison

10 réponses
Avatar
Pierre
Bonjour

Je souhaiterais récupérer le reste d'une divison d'un nombre par un autre.
Mais sans l'arrondi aux entiers de la fonction Mod.

Si je fais 2/1,4 je souhaiterais juste récupérer 0,43.
Pour l'instant avec Mod j'ai 0

Merci

10 réponses

Avatar
tking
Pierre a exprimé avec précision :
Bonjour

Je souhaiterais récupérer le reste d'une divison d'un nombre par un autre.
Mais sans l'arrondi aux entiers de la fonction Mod.

Si je fais 2/1,4 je souhaiterais juste récupérer 0,43.
Pour l'instant avec Mod j'ai 0

Merci




En attendant mieux, ça marche :

Private Sub Command1_Click()
Dim s() As String
Dim x
x = 2 / 1.4
s = Split(Str(x), ".")
MsgBox x
MsgBox s(0)
MsgBox s(1)

End Sub


Bonne journée.
Avatar
jean-marc
"Pierre" wrote in message
news:
Bonjour



Hello,

Je souhaiterais récupérer le reste d'une divison d'un nombre par un autre.
Mais sans l'arrondi aux entiers de la fonction Mod.

Si je fais 2/1,4 je souhaiterais juste récupérer 0,43.



Oui mais non.

Le reste de la division de 2 par 1,4, ce n'est pas 0,43.

C'est 0, 6.

2 divisé par 1,4 => 1 et reste : 0.6

Par contre, 2/1.4 = 1.4285714...

Si tu veux dire non pas le RESTE mais la PARTIE FRACTIONNAIRE, alors c'est
trivial:

c'est : résultat - la partie entière du résultat, comme suit :

1.4285714 - 1 = 0.4285714

Et si tu veux exactement 0,43:

Round(partie_frac, 2)

Et donc pour tester tout ça:

Dim dividende As Double
Dim diviseur As Double
Dim quotient As Double
Dim reste As Double
Dim partie_frac As Double
Dim result As Double

dividende = 2
diviseur = 1.4

quotient = Int(dividende / diviseur)
reste = dividende - (quotient * diviseur)

MsgBox "reste = " & reste

result = dividende / diviseur

MsgBox "result = " & result

partie_frac = result - Int(result)

MsgBox "partie_frac = " & partie_frac

' arrondi à 2 décimales seulement
MsgBox "partie_frac arrondi = " & Round(partie_frac, 2)


Cordialement,


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
jean-marc
"jean-marc" wrote in message
news:47da6b6f$0$2943$

Si tu veux dire non pas le RESTE mais la PARTIE FRACTIONNAIRE, alors c'est
trivial:

c'est : résultat - la partie entière du résultat, comme suit :



Et j'en profite pour ajouter que dans certains langages,
cette fonction existe et s'appelle : Frac.

Il est facile de l'implémenter en VB comme ça:



Private Function Frac(a As Double, _
b As Double, _
Optional precision As Double = 0#) As Double

Dim r As Double

If b <> 0 Then
r = a / b
If precision = 0# Then
Frac = r - Int(r)
Else
Frac = Round((r - Int(r)), precision)
End If
End If
End Function


Et tu peux tester comme ceci:

Private Sub Command1_Click()
Dim a As Double, b As Double
Dim res1 As Double, res2 As Double

a = 2
b = 1.4

res1 = Frac(a, b)

res2 = Frac(a, b, 2)

Debug.Print "res1=" & res1 & " res2=" & res2

End Sub

Voila, cette fois c'est tout !


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Pierre
Merci

"jean-marc" wrote in message
news:47da6b6f$0$2943$

"Pierre" wrote in message
news:
> Bonjour

Hello,

> Je souhaiterais récupérer le reste d'une divison d'un nombre par un


autre.
> Mais sans l'arrondi aux entiers de la fonction Mod.
>
> Si je fais 2/1,4 je souhaiterais juste récupérer 0,43.

Oui mais non.

Le reste de la division de 2 par 1,4, ce n'est pas 0,43.

C'est 0, 6.

2 divisé par 1,4 => 1 et reste : 0.6

Par contre, 2/1.4 = 1.4285714...

Si tu veux dire non pas le RESTE mais la PARTIE FRACTIONNAIRE, alors c'est
trivial:

c'est : résultat - la partie entière du résultat, comme suit :

1.4285714 - 1 = 0.4285714

Et si tu veux exactement 0,43:

Round(partie_frac, 2)

Et donc pour tester tout ça:

Dim dividende As Double
Dim diviseur As Double
Dim quotient As Double
Dim reste As Double
Dim partie_frac As Double
Dim result As Double

dividende = 2
diviseur = 1.4

quotient = Int(dividende / diviseur)
reste = dividende - (quotient * diviseur)

MsgBox "reste = " & reste

result = dividende / diviseur

MsgBox "result = " & result

partie_frac = result - Int(result)

MsgBox "partie_frac = " & partie_frac

' arrondi à 2 décimales seulement
MsgBox "partie_frac arrondi = " & Round(partie_frac, 2)


Cordialement,


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;









Avatar
Patrice Henrio
Pierre a écrit :
Merci

"jean-marc" wrote in message
news:47da6b6f$0$2943$
"Pierre" wrote in message
news:
Bonjour


Hello,

Je souhaiterais récupérer le reste d'une divison d'un nombre par un




autre.
Mais sans l'arrondi aux entiers de la fonction Mod.

Si je fais 2/1,4 je souhaiterais juste récupérer 0,43.


Oui mais non.

Le reste de la division de 2 par 1,4, ce n'est pas 0,43.

C'est 0, 6.

2 divisé par 1,4 => 1 et reste : 0.6

Par contre, 2/1.4 = 1.4285714...

Si tu veux dire non pas le RESTE mais la PARTIE FRACTIONNAIRE, alors c'est
trivial:

c'est : résultat - la partie entière du résultat, comme suit :

1.4285714 - 1 = 0.4285714

Et si tu veux exactement 0,43:

Round(partie_frac, 2)

Et donc pour tester tout ça:

Dim dividende As Double
Dim diviseur As Double
Dim quotient As Double
Dim reste As Double
Dim partie_frac As Double
Dim result As Double

dividende = 2
diviseur = 1.4

quotient = Int(dividende / diviseur)
reste = dividende - (quotient * diviseur)

MsgBox "reste = " & reste

result = dividende / diviseur

MsgBox "result = " & result

partie_frac = result - Int(result)

MsgBox "partie_frac = " & partie_frac

' arrondi à 2 décimales seulement
MsgBox "partie_frac arrondi = " & Round(partie_frac, 2)


Cordialement,


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;













Pour complèter ce que dit Jean-marc et sans vérification de ma part, Mod
fonctionne en VB avec des entiers donc avec transtypage

2 mod 1,4 devient 2 mod 1 soit 0 puisque quel que soit l'entier N, le
reste de la division de cet entier par 1 donne 0

7,5 mod 0,5 doit renvoyer une erreur, pas de division par 0 et
10,5 mod 3,5 renverra soit 11 mod 4 (donc 3), soit 10 mod 3 (soit 1)
selon le transtypage effectuée.
Alors que l'on pourrait s'attendre à 10,5 mod 3,5 = 0 car 10,5=3*3,5+0

On pourrait définir un modulo en nombres réels (positifs à priori puis
étendu aux nombres positifs et négatifs) par
x mod y = z ssi x=n*y+z avec n entier et 0<=z<y

Cette définition est correcte du fait que l'ensemble des réels est
archimédien.
Avatar
Fred
Dans : news:%,
Patrice Henrio disait :

On pourrait définir un modulo en nombres réels (positifs à priori puis
étendu aux nombres positifs et négatifs) par
x mod y = z ssi x=n*y+z avec n entier et 0<=z<y

Cette définition est correcte du fait que l'ensemble des réels est
archimédien.



Cela signifie-t-il que tout réel plongé dans une baignoire en ressort
mouillé ? :-)

--
Fred

Avatar
jean-marc
"Patrice Henrio" wrote in message
news:%

Pour complèter ce que dit Jean-marc et sans vérification de ma part, Mod
fonctionne en VB avec des entiers donc avec transtypage

2 mod 1,4 devient 2 mod 1 soit 0 puisque quel que soit l'entier N, le
reste de la division de cet entier par 1 donne 0



Oui:

? 2 mod 1.4
0


7,5 mod 0,5 doit renvoyer une erreur, pas de division par 0



Oui :

? 7.5 mod 0.5
==========> Division par zéro

10,5 mod 3,5 renverra soit 11 mod 4 (donc 3), soit 10 mod 3 (soit 1) selon
le transtypage effectuée.
Alors que l'on pourrait s'attendre à 10,5 mod 3,5 = 0 car 10,5=3*3,5+0



Non :-)

? 10.5 mod 3.5
2

Et en fait, ici le résultat "2" ne me choque pas plus que
ne me choquerait "3" ou "1" ou "0" ou même "42" ou "666".


On pourrait définir un modulo en nombres réels (positifs à priori puis
étendu aux nombres positifs et négatifs) par
x mod y = z ssi x=n*y+z avec n entier et 0<=z<y

Cette définition est correcte du fait que l'ensemble des réels est
archimédien.



Même si l'intérêt est douteux :-)

En fait, il est plus sage de se référer à la doc,
qui dit précisément la chose suivante :

Remarks

The modulus, or remainder, operator divides number1 by number2 (rounding
floating-point numbers to integers) and returns only the remainder as
result. For example, in the following expression, A (result) equals 5.

A = 19 Mod 6.7

Usually, the data type of result is a Byte, Byte variant, Integer, Integer
variant, Long, or Variant containing a Long, regardless of whether or not
result is a whole number. Any fractional portion is truncated. However, if
any expression is Null, result is Null. Any expression that is Empty is
treated as 0.

Ceci dit, la réponse tombe à l'eau dans la mesure ou l'OP
se trompe dans la dénomination de ce qu'il veut faire:
Il s'intéresse à la partie fractionnaire du résultat et pas
au "reste de la division".

--
Jean-Marc
Avatar
Patrice Henrio
>
On pourrait définir un modulo en nombres réels (positifs à priori puis
étendu aux nombres positifs et négatifs) par
x mod y = z ssi x=n*y+z avec n entier et 0<=z<y

Cette définition est correcte du fait que l'ensemble des réels est
archimédien.



Même si l'intérêt est douteux :-)




En fait cette définition a un intérêt pour tous les calculs
d'optimisation de plusieurs opérations (papiers peints, consommation ...)
Mais il est vrai que dans le cas présent ce n'est pas ce que souhaitais
le questionneur. Je répondais surtout sur le point du transtypage que tu
n'avais pas abordé et qui expliquait le 0 du demandeur et j'en ai
profité pour faire mon intéressant ...

A plus.
Avatar
Fran
On 3月14日, 午後2:41, "jean-marc" <jean_marc...@ yahoo.fr.invalid> wrote:
"Patrice Henrio" wrote in message
> 10,5 mod 3,5 renverra soit 11 mod 4 (donc 3), soit 10 mod 3 (soit 1) sel on
> le transtypage effectuée.
> Alors que l'on pourrait s'attendre à 10,5 mod 3,5 = 0 car 10,5= 3*3,5+0

Non :-)

? 10.5 mod 3.5
 2



The modulus, or remainder, operator divides number1 by number2
(rounding floating-point numbers to integers) and returns only the
remainder as result.



Hello,

Il est d'ailleurs à remarquer que le transtypage/arrondi dont il est
question fonctionne en réalité comme round ou même cint (http ://
faq.vb.free.fr/index.php?question8).
Donc, pour en revenir à ce qu'indiquait Patrice, 1.5 mod 3.5 = 10 mod
4 = (10 - 2 * 4) = 2 = (?=~ 42).

François
Avatar
jean-marc
"François Picalausa" wrote in message
news:

Hello,



Il est d'ailleurs à remarquer que le transtypage/arrondi dont il est
question fonctionne en réalité comme round ou même cint (http://
faq.vb.free.fr/index.php?question8).
Donc, pour en revenir à ce qu'indiquait Patrice, 1.5 mod 3.5 = 10 mod
4 = (10 - 2 * 4) = 2 = (?=~ 42).



Et donc bienvenu dans le monde merveilleux de l'arrondi bancaire
encore nommé arrondi au prochain entier pair :-)

Dans ce mode, on a de fait: 2 ~= 42 , pour peu que l'on ne lise pas
la doc en détail !!

--
Jean-Marc