» Example how to convert a double value in a binary coded decimal

Selbsgeschriebene Funktion getint() und getuchar() liest Bytes aus Datei als int und unsigned charNeuen Thread eröffnenNeue Antwort erstellenBeispiel zum Berechnen des Sinus
AutorNachricht
Junior 
Name: Voller Name als Anagramm: Fitje Weshoms
Geschlecht:
Fahrzeug: Yamaha YZF R6 Thundercat
Anmeldedatum: 15.07.2012
Beiträge: 92
Wohnort: Amberg, Oberpfalz
25.01.2016, 18:09
zitieren

Hello!

This function called bcd converts a long double value in a binary coded decimal
with digits after decimal!!!
the second parameter specifies the number of digits desired after the decimal,
if you want.

It works properly up to 6 digits after the decimal point.
It is written by my self with codeblocks 13.12 and SUSE Linux Leap 42.1

Example:

The long double value 65535.5 is converted to 1111111111111111.100

if yo use


long double x, result;
x = 65535.5;
result = bcd(x);

and 255.875 is converted to 11111111.1110

Is was written in c and later converted to c++. In my first time as newbie
the first programs in c and c++ was written with Symantec C++6.11 compiler.
Years later, in Linux gcc there was no such function like this to find. So it was
written by my self, just for fun! I tried at first an another way to convert the long
double value directly. But it was not exactly enough after decimal point.

You can modify it for own projects or experiments:

First the file bcd.h:

#ifndef BCD_H_INCLUDED
#define BCD_H_INCLUDED
#include <iostream>
#include <sstream>

using namespace std;


long double atold(std::string zawo)
{
 long double rewer = 0;
 std::istringstream b(zawo);
 b >> rewer;
 return rewer;
}

long double bcd(long double letter, int stellen = 0)
{
char binzahl[200];
int slei, sleib, dummy, nullsteller = 0;
long double testwert, rewer = -1;

 if ((letter >= 0) && (letter <= 4294967296) && (stellen <= 8))
  {
  rewer =  0;
  stellen *= -1;

 // Ininitalises the test value
 for (slei = 0; slei <= 99; slei++)
  binzahl[slei] = '\0';

  //testwert = 8589934592.00000;
  testwert = 1;
  for (slei = 0; slei <= 32; slei++)
  testwert *= 2;

   
 sleib = 0;

 for (slei = 32; slei >= stellen; slei--)
  {
   testwert /= 2;
   dummy = (letter / testwert);
   if (dummy != 0)
    {
     nullsteller = 1;
     binzahl[sleib] = '1';
     letter -= testwert;
    }

   if (nullsteller != 0)
   {
    if (dummy == 0)
     binzahl[sleib]= '0';
   if ((slei == 0) && (stellen < 0))
     binzahl[++sleib]= '.';
    sleib++;
   }
  }

 rewer = 0;
 std::istringstream b(binzahl);
 b >> rewer;
// only need to see if it works properly
//cout << "\nBinzahl: " << binzahl;
//cout << endl << "Ergebnis: " << fixed << rewer;
  }
return rewer;
}


#endif // BCD_H_INCLUDED

Now main.cpp

// Prototype: bcd bcd(int x);
// bcd bcd(long double x, int decimals);
// Description
// The bcd function converts x to a BCD (binary coded decimal) value.
// The x argument can be a long double value. For a long double value,
// the decimals argument, which is optional, specifies the number of digits desired after decimal
// Return Value:   The converted value.

#include <iostream>
#include "bcd.h"

using namespace std;

int main()
{
 long double dezimalwert = 0;
 long double bcdval;
 int stellen = 3;
 cout << "Enter decimal integer Value(0 up to 4294967296): ";
 cin >> dezimalwert;
 cout << endl << "Number of decimals after point(up to 6): ";
 cin >> stellen;

 bcdval = bcd(dezimalwert, stellen);
 cout.precision(stellen);
 cout << "\nbcdval  : " << fixed << bcdval;
 return 0;
}


pn
Gast 
25.01.2016, 18:09
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Example how to convert a double value in a binary coded decimal" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
Tickets für die So Coded am 23. Und 24. Juli in Hamburg zu gewinnen!
Code-Zauberinnen und Script-Magier da draußen! Ihr möchtet gern bei der So Coded, der erlesenen Zusammenkunft der Wizards-of-the-Web dabei sein, habt eure letzten Silberlinge aber für arkane Folianten ausgeben müssen? Dann nehmt doch einfach an unserem...
[Allgemein]von Martycareer
0
268
08.07.2015, 08:44
Martycareer
FK2 Double Din empfehlungen
Die Auswahl ist sehr hoch ich möchte definit einen Hardware Drehregler haben. Wieviel Zoll dürfte es denn Max haben? Double Din HU Fk2 Rahmen mit can BUs Adapter könnt ihr mir was empfehlen...
von brb
0
208
08.10.2018, 06:05
brb
Double DIN Blende - Teilenummer gesucht
Hallo Hondafans, ich bin auf der Suche nach der Teilenummer dieser Double DIN Blende von Honda Japan. Auf dem Zubehörmarkt ist bis jetzt noch nichts dieser Art für den aktuellen Accord zu...
von speedyse1976
1
783
08.03.2011, 18:19
vti_160
double sixx rennsportfahrwerke...Domlager gesucht
hi, nen kumpel hat in seinem e30 318is nen double sixx gewindefahrwerk verbaut. die domlager scheinen ausgeschlagen zu sein. das problem ist das zu der firma kaum noch was zu finden ist, soll aber eine deutsche firma sein. hat da jemand von euch ahnung...
von Redrum
5
405
07.04.2016, 20:01
HondaATR
[V]MIVV Double Sportsline + DB-Killer und Verbindungsteilen
Hallo Leute, auf meiner PC34 war bei Kauf eine Doppelauspuffanlage verbaut. Wie ich jetzt mit Rücksprache zum TÜV leider feststellen musste, dass diese nur für die Hornet PC36 zugelassen ist. Zur Laufleistung und Alter kann ich leider überhaupt nichts...
von Absurd
0
236
14.05.2013, 10:35
Absurd
Fehler beim Erstellen des Vorschaubildes: convert: unable to open image
Hallo zusammen, ich habe nach einem Providerwechsel folgendes Problem. Ich kann Bilder ganz normal hochladen jedoch wird kein Bild mit einem Umlaut (nach dem Providerwechsel also Bilder die ich 1zu1 kopiert und wieder eingefügt habe) angezeigt sondern...
von stefansvw
9
1.013
02.07.2013, 13:13
stefansvw
© 2004 - 2024 www.programmierer-forum.de | Communities | Impressum |