Komma niet weergeven wanneer geen decimalen bij 0,###

Status
Niet open voor verdere reacties.

Visara

Gebruiker
Lid geworden
10 mrt 2019
Berichten
217
Goededag,

Ik heb een vraagje over de opmaak van een getal.
Ik wil dat hele getallen worden weergegeven als heel getal zonder decimalen. Als een getal wél decimalen heeft wil ik dat er 3 worden weergegeven (afronden boeit in deze context niet).
Ik kies in het formulier bij Format 0,### en bij decimals 'Auto'.
Screenshot van een formulier in Datasheet-view:
Format decimalen2.jpg

Hoe krijg ik die rare komma weg bij getallen die geen decimalen hebben? Ik vind het geen gezicht.
Ik wil geen 5,000 ipv 5 hebben, dat leest vervelend aangezien decimalen een uitzondering zijn in deze context.

In de bron-tabel worden de gegevens in het bewuste veld [Aantal] opgeslagen als 'Number' 'Field size= Single'
Van deze tabel wordt een query gemaakt, [Aantal] wordt dmv 'Sum' opgeteld. Deze query wordt weergegeven in een formulier in Datasheet-view, dat zie je in de screenshot.

Met vriendelijke groet,
Visara
 
Laatst bewerkt:
Je kiest voor een hele ongelukkige opmaak, want het # houdt in dat een cijfer weergeven optioneel is (alleen dus als er ook echt een cijfer is), maar die komma staat er 'hard' in, dus die zie je altijd. De enige zinvolle combinatie is dan: 0,0## zodat je minstens één cijfer ziet, en maximaal 3. Elke andere combinatie zul je anders moeten oplossen, vrees ik. Zal wel programmeren worden op een tekstveld op een formulier. En dan nog: op een doorlopend formulier wordt je daar ook niet echt vrolijk van.
 
Heb je al geprobeerd met de conditionele opmaak?
 

Bijlagen

  • conditionalFormat2.JPG
    conditionalFormat2.JPG
    16,1 KB · Weergaven: 23
Het is uitermate lelijk als je bij het ene getal een nauwkeurigheid aangeeft tot 3 cijfers achter de , en dat bij andere getallen niet doet. Iets is nauwkeurig tot 3 cijfers achter de , en anders niet.
0,450
1,000

zie ik liever dan
0,450
1

Maar ja smaken verschillen;)
 
zie ik liever dan
Tja, zegt TS dan: smaken verschillen. Jammer toch dat veel nietsvermoedende gebruikers dan zitten opgescheept met de persoonlijke voorkeuren van een ontwerper :)
 
Bedankt voor de reacties.

Ik durf te wedden dat als jullie mijn collega's zouden zijn, jullie ook niet standaard 3 decimalen zouden willen zien.
Het rapport laat verkoopcijfers zien van ons winkeltje. BIJNA ALLE cijfers zijn hele getallen. Aantal flessen wijn, aantal potten pindakaas...
Zelfs als consumenten zelf een zak appeltjes afwegen slaat de kassa dit aan als 1 exemplaar. Alleen als de consument vergeten is zelf de appeltjes af te wegen en de kassamedewerker doet dit, alleen dán komt er een 'aantal met decimalen' in de verkooplijsten terecht. Dat is nou eenmaal hoe het werkt, de kassa slaat dan bij 612 gram 0,612x de kiloprijs aan.
Als jij mijn collega was en de intekening voor sinterklaasartikelen 2021 moet gaan doen, dan wil je een verkooprapport uitdraaien van wat er verkocht is bij sinterklaas 2020 om je intekening op te baseren.
Alle verkoopcijfers zijn dan hele getallen. Bijv 221x Chocoladeletters puur, 859x pepernoten etc... Zou raar zijn die lijst met decimalen aan te bieden, wij verkopen geen halve chocoladeletters.

@Noella Ik heb niet gedacht aan de mogelijkheid van conditionele opmaak, ik verwachtte dat ik iets met 0,### kon rommelen om te krijgen wat ik wil.
Ik ga kijken naar conditionele opmaak!
 
Volgens mij een beetje vreemde redenatie. Appels tel je of per stuk of als je ze wil wegen dan wordt de eenheid zoals jij je omschrijft gram. Hoe je dit dan bij elkaar wil optellen wordt dan wel weer een beetje een raadsel tenzij je weet hoeveel gram 1 appel is. Een fles wijn is op zich een entiteit alleen kan de de inhoud nogal verschillen. Dus wat ga je optellen? 3 flessen wijn of 1 fles wijn van 500 ml en 1 fles wijn van 1 liter (1000 ml) en 1 flesje wijn van 250 ml?
 
Ach, als je 0,42 ‘andijvie’ kan verkopen, kan alles :). Ben wel benieuwd hoeveel blaadjes je dan van de struik af plukt, en wat je met de rest doet.
 
Klopt wat je zegt, het optellen zou een rommel worden als je er de kilo's uit wil halen.

Als winkel verkoop je een artikel óf per stuk, óf per gewicht. Maar de werkelijkheid is iets minder zwart-wit. Pakken gehakt hebben een variabele prijs, gebaseerd op het precieze gewicht. In het geval van een pak gehakt wil de winkelier weten hoeveel stúks er zijn verkocht, niet hoeveel ze samen wegen.
Als jij als consument zelf een paar appels afweegt, dan is de opbouw van die sticker hetzelfde als die van het pak gehakt. In het geval van de appels wil de winkelier vooral weten hoeveel kilo er is verkocht. Het systeem slaat een sticker van de appels ook op als 1 stuk, net als bij het pak gehakt. In dit geval niet ideaal.
Heel inconsequent, maar wanneer de klant is vergeten de appels zelf af te wegen kan het bij de kassa worden opgelost met een ingebouwde tool. Een weegplaat weegt de appels en de kassamedewerker kiest de knop met het product in het scherm. Gek genoeg registreert de kassa dan bijv 0,625 stuk (bij 625gram).
In het screenshot zie je dat bij de andijvie op de volgende manier: de 4-cijferige productcode in de rechter kolom is wanneer de kassamedewerker het afwegen afhandelde, de 13-cijferige code is van stickers die de klant zelf afwoog. De rits nullen is dan gevuld met o.a. de prijs.

Andere oplossing zou zijn om ieder getal met decimalen in de brontabel om te zetten naar 1, op deze manier wordt alles op dezelfde manier weergegeven. Het doel is de visuele weergave, niet persé het aanpassen van de bron.
Dus 0,12115 wordt 1
3,5664 wordt 1
3 blijft 3

Kan dit wel?
 
Bij wijze van spreken, OctaFish :)
Het is u niet toegestaan om een los blaadje andijvie te komen kopen :mad:
Maar u heeft me zo vaak geholpen, een gratis goede fles wijn zou u zo mee krijgen
 
Laatst bewerkt:
Misschien moesten we i.p.v. te blijven discussiëren over het waarom het eens over een oplossing hebben. Ik snap het proces nog niet helemaal, namelijk het moment waarop je e.e.a. wilt zien. Bij het invoeren moet je de feitelijke getallen invoeren, en weet het programma niet of er wel of geen decimalen worden ingevoerd. Dus daar valt weinig aan te sleutelen aan een tekstvak. Dus de vraag is: op welk moment wil je deze opmaak zien?

Ik heb het in een voorbeeldje wel opgelost namelijk :).
 
De optie van Noella lijkt me een goede... de expressie zou dan zijn:

Code:
([TeBetalen]*1000) Mod 1000<>0

Ook zonet getest bij een eigen database van mij... maar helaas kon ik de format van de getallen niet instellen. Enkel kleurtjes.
Ik zou trouwens ook niet direct een voorstander zijn om verschillende format's te gebruiken... maar zoals al aangegeven: als het een absolute uitzondering is... dan misschien toch.

Je hebt echter nog een andere optie:
Maak je tekstvak gewoon op zonder decimalen, en zet daar een tekstvak vlak naast met enkel de decimalen. Zo heb je dan toch ook al een iets betere opmaak.
 
Visara,

In een Query

Code:
Aantal: IIf([Stuks]*1000 Mod 1000<>0;Format([Stuks];"#,000");[Stuks])


Gr. Cor
 
Die query is een goede optie voor het weergeven van gegevens... maar niet voor het invoeren. In een veld met een formule kan je niets invoeren.
Maar als het er om gaat om enkel de gegevens te raadplegen is dat wellicht nog de beste optie.
 
Ok mijn oplossing: twee keer hetzelfde veld op het formulier/rapport, waarvan er dus één is opgemaakt als Integer, en de ander als decimalen. Je zet ze precies over elkaar heen, en maakt één van de twee onzichtbaar op basis van de waarde van dat veld. Ik schakel dat op basis van de gebeurtenis <Bij aanwijzen>, zodat bij elk record gecheckt wordt wat de waarde is. En daarmee krijg je dus bij elk record de juiste opmaak te zien. Dit werkt niet geweldig op een doorlopend formulier, omdat je daar natuurlijk maar één veld hebt dat je in meerdere versies ziet, dus klik je in een ander record, dan verandert de opmaak van alle zichtbare records. Maar in een enkelvoudig formuiler werkt het prima.
 
In code ziet dat er zo uit:
Code:
Private Sub Form_Current()
    With Me
        .Prijs.Visible = Not CInt(.Prijs.Value) = .Prijs.Value
        .Prijs2.Visible = CInt(.Prijs.Value) = .Prijs.Value
    End With
End Sub

ik zoek nog even een truc voor op een rapport; moet ook mogelijk zijn.
 
En dezelfde truc werkt ook op rapporten:
Code:
Private Sub Details_Format(Cancel As Integer, FormatCount As Integer)
    With Me
        .Prijs.Visible = Not CInt(.Prijs.Value) = .Prijs.Value
        .Prijs2.Visible = CInt(.Prijs.Value) = .Prijs.Value
    End With
End Sub

Ook hier: twee tekstvelden op hetzelfde veld, met twee aparte opmaaknotaties. Je laat per getal het juiste veld zien. Op een rapport zie je dus óók de onderlinge rijen goed opgemaakt. Zoals het hoort :).
De gebeurtenis <Bij opmaken> werkt overigens alleen in de Afdrukweergave; niet in die twee andere (wat mij betreft volslagen overbodige) weergaven (ja, Rapportweergave en de nog ergere Layout weergave) die Microsoft met de latere versies heeft ingebakken.
 
Allemaal bedankt voor de reacties.

@ LucHeyndrickx Het gaat alleen om het raadplegen van de gegevens (hoeveel melk verkochten we afgelopen weekend? Hoe verkocht de productlijn X tijdens de vorige actieperiode? etc etc). Het uploaden van de meest recente kassabonnen doe ik mbv MS PowerShell.

@Pletter: Die Iif-code voor in de query werkt! Dank! Je .rar bestand kan ik niet direct openen, maar je eerder geposte code werkt prima.

@Octafish Bedankt voor jouw moeite. Die truc ga ik bewaren, komt bij een andere gelegenheid van pas denk ik. De gebruiker zal in mijn huidige project bijna altijd lijsten in zijn/haar scherm willen zien, een Doorlopend Formulier / Datasheet zijn hier de meest logische keuzes. De code van Pletter vindt ik een prettige oplossing.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan