2017-09-16 5 views
-3

Ich versuche, Zahlen in Text zu konvertieren, und dieser Code gibt mir einen Fehler bei einer der Variablen.Konvertieren von Zahlen mit Dezimalstellen in Text

Nur am Ende der dritten Variable gibt es mir einen "; erwartet" -Fehler.

Was passiert im Code?

public static string NumberToWords(double doubleNumber) 
    { 
     var beforeFloatingPoint = (int)Math.Floor(doubleNumber); 
     var beforeFloatingPointWord = "{NumberToWords(beforeFloatingPoint)} Rupees"; 
     var afterFloatingPointWord = "{SmallNumberToWord((int) ((doubleNumber - beforeFloatingPoint) * 100),"")} cents"; 
     return "{beforeFloatingPointWord} and {afterFloatingPointWord}"; 
    } 

der Fehler ist genau am Ende der unteren Zeile.

var afterFloatingPointWord = "{SmallNumberToWord((int) ((doubleNumber - beforeFloatingPoint) * 100),"")} cents"; 

vollständiger Code ist unten und jetzt, wenn ich den Code ausführen bekomme ich eine Fehlermeldung, dass Eingabezeichenfolge war nicht in einem korrekten Format (auf der Schaltfläche Click-Ereignisse). Es funktioniert ohne Dezimalstellen. aber mit dezimalen gibt es mir diesen Fehler. Ich poste den vollständigen Code unten.

Wenn jemand mir helfen kann, das funktioniert bitte.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace CheckPrintingSystem 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public static string NumberToWords(double doubleNumber) 
     { 
      var beforeFloatingPoint = (int)Math.Floor(doubleNumber); 
      var beforeFloatingPointWord = string.Format("NumberToWords(beforeFloatingPoint)} Rupees"); 
      var afterFloatingPointWord = string.Format(@"{SmallNumberToWord((int) ((doubleNumber - beforeFloatingPoint) * 100),"")} cents"); 
      return "{beforeFloatingPointWord} and {afterFloatingPointWord}"; 
     } 

     private static string NumberToWords(int number) 
     { 


      if (number == 0) return "zero"; 

      if (number < 0) return "minus" + NumberToWords(Math.Abs(number)); 

      string words = ""; 

      if((number/1000000) > 0) 
      { 
       words += NumberToWords(number/1000000) + "million "; 
       number %= 1000000; 
      } 

      if((number/1000) > 0) 
      { 
       words += NumberToWords(number/1000) + "thousand "; 
       number %= 1000; 
      } 

      if ((number/100) > 0) 
      { 
       words += NumberToWords(number/100) + "hundred "; 
       number %= 100; 
      } 

      words = SmallNumberToWord(number,words); 
      return words; 

     } 

     private static string SmallNumberToWord(int number, string words) 

     { 
      if (number <= 0) return words; 
      if (words != "") words += "and "; 

       var unitsMap = new[] { "zero ", "one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ", "nine ", "ten ", "eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen "}; 
       var tensMap = new[] { "zero ", "ten ", "twenty ", "thirty ", "fourty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety " }; 
       if (number < 20) words += unitsMap[number]; 
       else 
       { 
        words += tensMap[number/10]; 

        if ((number % 10) > 0) words += " " + unitsMap[number % 10]; 
       } 
       return words; 

     } 



     private void button1_Click(object sender, EventArgs e) 
     { 
      textBox2.Text = NumberToWords(Convert.ToInt32(textBox1.Text)); 
     } 
    } 
} 
+0

Um ein doppeltes Anführungszeichen in einem normalen Zeichenfolge einfügen einen umgekehrten Schrägstrich verwenden. '\" '(Nicht ein weiteres doppeltes Anführungszeichen) Literalzeichenfolgen (' @ "..." ') sind unterschiedlich – Richard

+2

Möchten Sie die Zeichenfolgeninterpolation verwenden? Verwenden Sie die $" "Syntax. Beachten Sie auch, wie Sie doppelte Anführungszeichen in doppelte Anführungszeichen setzen - Sie müssen den inneren Anführungszeichen entgehen. – orhtej2

+0

Guys Ich habe string.Format und Fehler ging weg.aber ich habe einen neuen Fehler, wenn ich den Code ausführen.Ich habe den vollständigen Code oben.Helfen Sie mir, es sortiert zu bekommen. @ Orhtej2 kann $ Syntax nicht verwenden, die es mir gibt unerwarteter Zeichenfehler –

Antwort

-2

Um den Fehler zu korrigieren, müssen Sie einfache Anführungszeichen für die leere Zeichenfolge verwenden.

So wird der Code sein müssen:

var afterFloatingPointWord = "{SmallNumberToWord((int) ((doubleNumber 
- beforeFloatingPoint) * 100),'')} cents"; 

Dies liegt daran, auf den zweiten doppelten Anführungszeichen die Zeichenfolge geschlossen werden soll.

Um den Rest des Codes arbeiten zu können, müssen Sie den Code etwas ändern.

Es wird funktionieren, wenn Sie die NumberToWords Methode ändern:

public static string NumberToWords(double doubleNumber) 
{ 
    var beforeFloatingPoint = (int)Math.Floor(doubleNumber); 
    var beforeFloatingPointWord = NumberToWords(beforeFloatingPoint) + " Rupees"; 
    var afterFloatingPointWord = SmallNumberToWord((int)((doubleNumber - beforeFloatingPoint) * 100), string.Empty) + " cents"; 
    return beforeFloatingPointWord + " and " + afterFloatingPointWord; 
} 
+0

kann ich Wenn Sie ein einfaches Anführungszeichen verwenden, gibt es zwei Warnungen für die zweite und dritte Variable, die besagt, dass die Werte noch nie verwendet wurden. also habe ich string.Format und Fehler ging weg. aber ich habe einen neuen Fehler, wenn ich den Code ausführe. es ist in Ordnung, wenn ich nur Zahlen habe, aber mit Dezimalstelle erhalte ich einen Fehler. Ich habe den obigen vollständigen Code beigefügt. Bitte helfen Sie mir, es aussortiert zu bekommen. –

+0

Ich habe die Antwort mit der neuen NumberToWords-Implementierung geändert. Das Double muss in ein Int konvertiert werden, damit die Dinge funktionieren. –

+0

vielen Dank @ Koen Meijer, aber ich bekomme einen Fehler auf dem Button Click Event. private void button1_Click (Objektabsender, EventArgs e) { textBox2.Text = ZahlToWords (Convert.ToInt32 (textBox1.Text)); } –

Verwandte Themen