Freitag, 27. Mai 2011

Unendlich viele Nachkommastellen anzeigen

Idee
Ich wollte eine Nachkommastelle prüfen und stellte fest, dass die meisten Rechner soweit nach dem Komma nicht mehr anzeigen. Verständlich, jedoch gibt es sehr seltene Fälle wo man dies braucht. Klar wieder eine der nice to have und nie genutzte Funktion, aber ich wollte es euch nicht vorenthalten, falls jemand schnell eine Funktion braucht und nur Copy&Paste machen will. Die Gesamtgroesse ansich ist auf 1000 Zeichen vorbelegt und kann mittels Parameter angepasst werden. Die errechnete Zahl ist ein Text, klar, sonst könnte man per Boardmittel das Ergebnis errechnen.

Umsetzung
Die Funktion ist in JavaScript geschrieben. Um den Code etwas zu erleichtern, habe ich die Formel für die Umwandlung der Zahl in eine Float als eigene Funktion ausgegliedert. Die Umwandlung in float ist hilfreich, wenn die Werte über ein Formular oder eine externe Datenquelle kommen und man nicht immer prüfen will, ob es im richtigen Format vorliegt. Also wird einfach alles konvertiert und wird immer eine float Zahl.
Angehängt ist auch eine rekursive Variante, aber die sollte man nicht nutzen, denn der Overhead kann den Rechner sehr belasten. Ich wollte die nicht weglassen, falls man einfach sehen will, dass Rekursion nicht immer die beste Wahl ist, vor allem nicht auf Performance ausgelegte Strukturen. Mit Sicherheit kann man den Code noch optimieren, aber so sieht man den Weg viel einfacher. Feel free to abuse it.

Code
// Hilfsfunktion floatval

function floatval(text, maxwert, minwert) {
    var zahl = parseFloat(text);
    if (isNaN(zahl))
        zahl = 0.0;
    if (typeof(maxwert) != "undefined" && maxwert < zahl)
        zahl = maxwert;
    if (typeof(minwert) != "undefined" && minwert > zahl)
        zahl = minwert;
    return zahl;
}

// Die eigentliche Funktion

function errechneZahl(zahla,zahlb,maxschritte) {
var t = "";
zahla = floatval(zahla);
zahlb = floatval(zahlb);
var ok = true;
var schonkomma = false;
var za = zahla;
var zb = zahlb;
var periode = new Array();
if (!maxschritte)
maxschritte = 1000;
for (var a=0;a<maxschritte;a++) {
if (za < zb){
if (t == "" || schonkomma)
t += '0';
if (!schonkomma) {
t += '.';
schonkomma = true;
} else
periode.push({"zahl":0,"wert":0});
za *= 10;
} else {
var d = Math.floor(za/zb);
t += d;
var dd = za - (d*zb);
if (dd == 0)
break;
if (schonkomma) {
var pwert = "";
for (var b=0;b<periode.length;b++){
if (periode[b].zahl == dd || pwert != "") {
pwert += ""+periode[b].wert;
}
}
if (pwert != "") {
t += " Periode "+pwert;
break;
}
periode.push({"zahl":dd,"wert":d});
}
za = dd;
if (schonkomma)
za *= 10;
}
}
return t;
}

// die rekursive, nicht empfohlene Version
/*
function errechneZahlRekursiv(zahla, zahlb, ergtext, schonkomma) {

var t = "";
zahla = floatval(zahla);
zahlb = floatval(zahlb);
if (ergtext)
t = ergtext;
if (zahla == zahlb) {
t += "1";
return t;
}
if (t.length > 1000)
return t;
if (zahla < zahlb) {
if (t == "" || schonkomma)
t += '0';
if (!schonkomma) {
t += '.';
schonkomma = true;
}
zahla *= 10;
t = errechneZahl(zahla, zahlb, t, schonkomma);
} else {
var d = Math.floor(zahla/zahlb);
t += d;
var dd = zahla - (d*zahlb);
if (dd == 0)
return t;
if (schonkomma)
dd *= 10;
t = errechneZahl(dd, zahlb, t, schonkomma);
}
return t;
}
*/

Fazit
Interessant um Werte schnell zu überprüfen. Rechnen kann man damit spontan nicht, aber man könnte auch Funktionen schaffen, welche beliebig große Zahlen addieren und dergleichen. Hier ist lediglich eine schnelle, einfache Funktion, welche viele Nachkommastellen anzeigen kann. Viel Spaß damit.

Saso Nikolov

Samstag, 14. Mai 2011

VoIP - Ist Voice over IP eine wirkliche Alternative?


Auf dem VoIP Markt gibt es im Grunde nur wenige Möglichkeiten. Die zwei bekanntesten sind Skype und SIP Provider. Skype hat den Vorteil als guter Kommunikationsmanager vieles in einer Software zu vereinen und damit vieles einfach zu machen. Und dies kostenfrei, bzw mit geringen Einstiegskosten. Da sehr viele Skype nutzen, sind die Chancen gross kostenlose Telefonate zu tätigen. Zudem gibts neben Chat auch Gruppenchat, Videokonferenz, Screensharing und Fileexchange. Aber hier fehlen die Verbindungen zu den anderen Elementen wie Email und Dateienmanagement. Allerdings sind die Kosten für Anrufe höher als bei manchen SIP Anbieter. Die eingesetzte Technik ist aber bekanntermassen ziemlich gut und hat keine Probleme mit Firewalleinstellungen.
Irgendwie scheint das SIP nicht ideal durchdacht, da es 2 Ports braucht, die nicht immer freigeschaltet sind. Somit ist es oft nicht immer möglich spontan sein SIP Telefon, ob Software oder Hardware überall zum Einsatz zu bringen. Es sind einfach zu viele Komponenten involviert, auf welche man keinen direkten Einfluss hat. So kann die Verbindung zum Router sehr gut sein und auch zum Provider, doch wenn der SIP Server woanders liegt, ist hier nicht immer gewährleistet, dass es ein QoS gibt. Vorallem wenn mehrere Carrier involviert sind.


Fazit
VoIP ist spitze für firmeninterne Kommunikation. Dort kann man die Netzwerkelemente abstimmen und den QoS einrichten. Hat man auch entsprechende Server ist die Konnektivität über verschiedene Ebenen hinweg vereinfacht, jedoch auch entsprechend teuer in den Anschaffungskosten. Für kleine Einheiten, die eine günstige Telefonergänzung zu ihrem online Office suchen, ist die Skype Lösung besser. Da kaum Startkosten und auch mit Skypein eine externe Rufnummer zur Verfügung gestellt wird. Microsoft hat Skype erworben, so bleibt zu hoffen, dass die Einbindung zum Office Paket schnell geschiet. Dann könnte das easy Full-Web-Office am Strand möglich werden. Vorallem dank der immer besseren Smartphones.