2009-07-20 16 views
3

zu verwenden Aus mehreren Gründen muss ich Floats in meinem Code anstelle von doubles verwenden. Um eine wörtliche in meinem Code zu verwenden, muss ich schreiben, so etwas wie:Auf der Suche nach einer einfacheren Möglichkeit, Floats in C#

float f = 0.75F; 

oder der Compiler barf, da sie nur „0,75“ als Doppel behandelt. Gibt es etwas, das ich in meinen Code einfügen oder in Visual Studio einstellen kann, damit es ein Literal wie "0.75" als Float behandelt, ohne jedes Mal ein "F" anzuhängen?

+5

Komm schon! Wie viele Float-Konstanten müssen Sie definieren? Wenn Sie mehrere haben, verwenden Sie einfach die Befehle Suchen und Ersetzen für die paar Male. – leppie

+1

Ich stimme @leppie zu. Sie sollten Literale wirklich so begrenzen. Wenn Sie viele Standardzuweisungen vornehmen und der Wert normalerweise identisch ist, verschieben Sie sie in eine statische interne Klasse und verweisen Sie auf diese Weise. Außerdem können Sie in Kleinbuchstaben f anstelle von Großbuchstaben F ein Float-Literal angeben, wodurch Sie einen Umschalt-Tastenanschlag sparen. Falls es dich interessiert. :) – Randolpho

+0

Ich bin neugierig, warum jemand jemals Floats statt Doubles verwenden würde. Kannst du uns von deiner "Anzahl der Gründe" erzählen? –

Antwort

0

Float kommt mit einem F :-)

14

Nein - zum Glück, IMO. Literale werden überall gleich behandelt.

Das ist eine gute Sache - stellen Sie sich vor, ein Wartungsentwickler kommt und sieht sich Ihren Code in einem Jahr an. Er sieht "0.75" und denkt "Ich kenne C# - das ist ein Doppelgänger! Bleib dran, wie wird es einer Float-Variablen zugewiesen?" Ick.

Ist es wirklich so schmerzhaft, das "F" überall hinzuzufügen? Haben Sie wirklich , dass viele Konstanten? Könnten Sie sie als konstante Werte extrahieren, so dass alle Ihre "F-Suffix" Literale an der gleichen Stelle sind.

+0

Wie ich in meinem Kommentar zur ursprünglichen Frage erwähnt, stimme ich zu, begrenzen Sie Ihre Literale und extrahieren sie als Konstanten für maximale Wartbarkeit – Randolpho

+0

Es ist nicht schlitz-meine-Handgelenke schmerzhaft, aber es ist ärgerlich.Was ich tue, ist weitgehend experimentell und umfasst das Optimieren von Parameterwerten und das Testen der Ergebnisse.Manchmal gibt es viele davon in einer Formel, so dass es vieleFs gibt Vergessen Sie nicht hinzuzufügen – MusiGenesis

+0

Dann verwenden Sie verdoppelt während Ihrer Tests und wechseln zu Floats später – Randolpho

1

Die Sprache interpretiert Fließkomma-Präzisionsliterale als doppelt überall. Dies ist kein konfigurierbares Merkmal des Compilers - und das aus gutem Grund.

Die Konfiguration, wie die Sprache Ihren Code interpretiert, würde zu Problemen sowohl mit der Kompatibilität als auch der Fähigkeit von Wartungsentwicklern führen, zu verstehen, was der Code bedeutet.

der Regel nicht ratsam Während Sie den Schmerz ein wenig in C# 3 unter Verwendung reduzieren können:

Suffix
var f = 0.75F; 

Nur vorsichtig sein, weil zu vergessen die ‚F‘ mit dieser Syntax bewirkt, dass der Compiler eine erstellen doppelt, kein Schwimmer.

+0

Das reduziert diesen Schmerz überhaupt nicht. Ich muss immer noch den F. eingeben. – MusiGenesis

+0

Dies ist ein Ort, an dem ich ** nicht die var-Syntax verwenden würde, nur aus dem von Ihnen beschriebenen Grund. Auf der anderen Seite würde ich doubles verwenden, nicht schwimmt ... – tvanfosson

+0

Einige Sprachen ermöglichen neu zu definieren, wie der Code mit Makros wie C zum Beispiel interpretiert wird. Es war nicht in C# enthalten, weil es nicht so nützlich ist und es so einfach ist, ein Chaos daraus zu machen. :) – Guffa

0

Ich würde Sie immer

var meaning = 1f; 

, weil die "var" Keyword viel menschliche Interpretation und Wartung spart Zeit zu verwenden raten.

+0

Ich bin mir nicht sicher, ob dies wirklich jede menschliche Interpretation erspart und mich zwingt nachzusehen am ende (das f) für den typ, anstatt mir zu erlauben, mich auf die normale C# konvention zu verlassen, dass der typ zuerst sein wird, lässt mehr platz für fehler und dauert länger imo. – user12345613

0

Das richtige Verhalten wäre nicht für einen Compiler, nicht-suffixed Literale als Float mit einfacher Genauigkeit zu interpretieren, sondern zu erkennen, dass Konvertierungen von Double in Float als Erweiterung Konvertierungen betrachtet werden sollten, da für jeden double Wert gibt entweder genau eine eindeutig korrekte float Darstellung, oder (in einigen seltenen Randfällen) wird es genau zwei gleichwertige Werte geben, von denen keiner mehr als ein Teil pro Billiarde davon sein wird, der eindeutig korrekte Wert zu sein. Semantisch betrachtet, sollten Konvertierungen von float zu double als verkleinerte Konvertierungen angesehen werden (da sie erfordern, dass der Compiler bei Informationen, die er nicht hat, "rät"), aber die praktischen Schwierigkeiten könnten dazu führen, dass Konvertierungen in diese Richtung "verbreitert" werden.

Vielleicht sollte man Microsoft eine Petition hinzufügen, um eine Erweiterung der Konvertierung von double zu float hinzuzufügen?Es gibt keinen guten Grund, warum Code, der Grafikkoordinaten als double berechnet, beim Aufruf von Zeichenfunktionen mit Typumwandlungen überladen sein sollte.

Verwandte Themen