none
Arrotondare una variabile RRS feed

  • Domanda

  • Devo arrotondare delle variabili, che essendo Double possono avere anche oltre 10 cifre decimali.

    Le devo però arrotondare a step di 0, 2, 4 , 6 ecc... o 0, 5, 10, ma sulla prima cifra non decimale, quindi sulle unità, Es. 5001,6789565 deve diventare 5002 o 5000,3224455 diventerà 5000, così come5004,6789887 diventerà 5006.

    Oppure anche a step di 10, 20, 30 ecc... sulle decine, esempio 15008,2333444 diventa 15010, 15004,988877 diventa 15000, 15015,9888788 diventa 15020, e cos' via.

    Uso Visual Basic 5 e non riesco a trovare la possibilità di fare la cosa, esiste in Visual Basic, anche successivo a 5 (ma se V.B.5 meglio, ho la licenza, e siccome lo uso per lavoro...), oppure ci sono delle routin che consentono la cosa?

    Grazie.

    sabato 7 giugno 2014 18:36

Risposte

  • Ciao sevemore, ora ho capito meglio.

    Ti propongo una funzione che accetta un Double e un intero, che rappresenta la divisione, e restituisce un intero che rappresenta il numero arrotondato.

    La funzione elabora la parte intera del numero Double per ottenere l’arotondamento in base alla divisione fornita.

    Spero sia di tua utilità. Ciao J

    Private Function ArrotondamentoSpeciale(p As Double, div As Integer) As Integer
            Dim Arrotondato As Integer = 0
            Dim ParteIntera As Integer = CInt(Math.Truncate(p))
            If div < 2 And div >= 0 Then
                If div = 0 Then
                    Arrotondato = ParteIntera
                Else
                    Arrotondato = CInt(p)
                End If
            Else
                If div > 0 Then
                    Dim p1 As Integer = ParteIntera Mod div
                    Dim p2 As Integer = ParteIntera - p1
                    Dim p3 As Integer = CInt(p1 / div) * div
                    Arrotondato = p2 + p3
                End If
            End If
            Return Arrotondato
        End Function


    mario formosa

    • Contrassegnato come risposta sevemore domenica 15 giugno 2014 19:14
    domenica 15 giugno 2014 10:29

Tutte le risposte

  • Ciao sevemore, hai tutto il mio rispetto per il lavoro che hai fatto con versioni precedenti degli strumenti di sviluppo, però permettimi di esprimere che non sono d'accordo con la mentalità conservativa. Secondo me agli aggiornamenti corrispndono strumenti migliori, quindi perché non aggiornarsi ? :-)

    In merito al problema che hai posto, mi pare di capire, ma forse mi sbaglio, che quelli che chiami arrotondamenti sono piuttosto vere e proprie trasformazioni, quindi ottenibili con funzioni.

    Infatti se 15004,988877 deve diventare 15000 credo che si può fare solo con una funzione apposita.

    Capendo meglio il problema, credo sia possibile trovare una soluzione.

    Ciao.


    mario formosa



    • Modificato Mario Formosa sabato 14 giugno 2014 08:12 integration
    sabato 14 giugno 2014 08:03
  • Grazie Mario, sono d'accordo con te sul fatto che sia sempre il caso di aggiornare gli strumenti, però io non uso VB5 da dieci anni, ma ho la licenza regolarmente acquistata, mi è sorta un'esigenza, quindi ho reinstallato VB5 sul PC in ditta.

    La mia esigenza è quella di simulare la visualizzazione, come se fosse quella di una bilancia elettronica da supermercato, le bilance in oggetto, hanno divisioni di 2 o 5 o 10 grammi, il peso da visualizzare nasce da un calcolo, fatto mediante l'utilizzo di una formula matematica riportata nella Gazzetta Ufficiale della Repubblica Italiana del 07-06-1999, la formula in oggetto coinvolge le zone di gravità territoriali, che dipendono dalla classe di precisione della bilancia, ma che indicativamente, corrispondono alla provincia nella quale la bilancia è abilitata ad operare, per esempio, la gravità di Treviso è 9,80631 mentre la gravità di Piacenza è 9,80459.

    Quindi il calcolo, riporterà un dato con diversi decimali, che dovrà venire portato a quanto la bilancia (in base alla divisione) visualizzerebbe.

    Mi rendo conto che la cosa non è semplice, sopratutto per che non opera nel mondo di sistemi di pesatura.

    Proverò a vedere se riesco a creare una funzione che mi consenta di fare la cosa.

    Grazie ancora.

    sabato 14 giugno 2014 19:22
  • Ciao sevemore, ora ho capito meglio.

    Ti propongo una funzione che accetta un Double e un intero, che rappresenta la divisione, e restituisce un intero che rappresenta il numero arrotondato.

    La funzione elabora la parte intera del numero Double per ottenere l’arotondamento in base alla divisione fornita.

    Spero sia di tua utilità. Ciao J

    Private Function ArrotondamentoSpeciale(p As Double, div As Integer) As Integer
            Dim Arrotondato As Integer = 0
            Dim ParteIntera As Integer = CInt(Math.Truncate(p))
            If div < 2 And div >= 0 Then
                If div = 0 Then
                    Arrotondato = ParteIntera
                Else
                    Arrotondato = CInt(p)
                End If
            Else
                If div > 0 Then
                    Dim p1 As Integer = ParteIntera Mod div
                    Dim p2 As Integer = ParteIntera - p1
                    Dim p3 As Integer = CInt(p1 / div) * div
                    Arrotondato = p2 + p3
                End If
            End If
            Return Arrotondato
        End Function


    mario formosa

    • Contrassegnato come risposta sevemore domenica 15 giugno 2014 19:14
    domenica 15 giugno 2014 10:29