[英]What's the quickest/best way to format a ?double to currency for string output in C#?
[英]C# , What is the best way of converting a String to a double?
我一直在尋找對此問題已經回答的解決方案,但是似乎沒有一個與我的代碼兼容。 我才剛剛開始用C#編寫代碼,我很困惑我的代碼是如何工作的。
using System;
namespace dt
{
class Averager
{
static void Main()
{
var total = 0.0;
int runningNumbers = 0;
while(true)
{
Console.Write("Enter a number or type \"done\" to see the average: ");
if(Console.ReadLine().ToLower() == "done")
{
var average = (total / runningNumbers);
Console.Write("Average: " + average);
break;
}
else
{
var tempNew = Double.Parse(Console.ReadLine());
total += tempNew;
runningNumbers += 1;
continue;
}
}
}
}
}
在上面的代碼中,我試圖將輸入的字符串轉換為雙精度型。 當我運行該程序時,它循環一次,並且程序凍結。 如果我在控制台中鍵入,則會出現此錯誤:
未處理的異常:
System.FormatException:輸入字符串的格式不正確。
在System.Number.ParseDouble(System.String值,System.Globalization.NumberStyles選項,System.Globaliz
在System.Double.Parse(System.String s,System.Globalization.NumberStyles樣式,System.Globalization.Number
在System.Double.Parse(System.String s,System.IFormatProvider提供程序)處[0x0000c]在dturato.Averager.Main()中的[0x00058]在<249eeff07c4a4744a6b024a0c9b6c23b>:0中
[錯誤]致命異常:System.FormatException:輸入字符串的格式不正確。
在System.Number.ParseDouble(System.String值,System.Globalization.NumberStyles選項,System.Globaliz
在System.Double.Parse(System.String s,System.Globalization.NumberStyles樣式,System.Globalization.Number
在System.Double.Parse(System.String s,System.IFormatProvider提供程序)處[0x0000c]在d.Averager.Main()中的[0x00058]在<249eeff07c4a4744a6b024a0c9b6c23b>:0 **中
根據我到目前為止的研究,這意味着String由於某種原因沒有轉換為double。 如果有人可以幫助或提供任何出色的解決方案,謝謝。
您要兩次致電ReadLine
! 第一次是在提示后。 第二個是在if語句的else
子句中。 第二個可能為null,並在嘗試轉換為double時導致錯誤。 您需要將輸入的值存儲到變量中:
using System;
namespace dt
{
class Averager
{
static void Main()
{
var total = 0.0;
int runningNumbers = 0;
while(true)
{
Console.Write("Enter a number or type \"done\" to see the average: ");
string input = Console.ReadLine();
if(input.ToLower() == "done")
{
var average = (total / runningNumbers);
Console.Write("Average: " + average);
break;
}
else
{
var tempNew = Double.Parse(input);
total += tempNew;
runningNumbers += 1;
continue;
}
}
}
}
}
該錯誤告訴您確切的問題。
輸入的字符串格式不正確。
您需要確保對parse方法的輸入有效。 在大多數情況下,您會發現Parse方法的TryParse變體。 在這種情況下, double.TryParse就是這樣做的。
using System;
public class Example
{
public static void Main()
{
string value;
double number;
value = Double.MinValue.ToString();
if (Double.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("{0} is outside the range of a Double.",
value);
value = Double.MaxValue.ToString();
if (Double.TryParse(value, out number))
Console.WriteLine(number);
else
Console.WriteLine("{0} is outside the range of a Double.",
value);
}
}
// The example displays the following output:
// -1.79769313486232E+308 is outside the range of the Double type.
// 1.79769313486232E+308 is outside the range of the Double type.
為了回想您的代碼,您最初遇到的問題是要多次讀取輸入:
using System;
namespace dt
{
class Averager
{
static void Main()
{
var total = 0.0;
int runningNumbers = 0;
while (true)
{
// Ask for user for a new input
Console.Write("Enter a number or type \"done\" to see the average: ");
var line = Console.ReadLine();
// Try to parse the input
double value;
if(double.TryParse(line, out value)) {
total += value;
runningNumbers += 1;
continue;
} else if(line.ToLower() == "done")
{
var average = (total / runningNumbers);
Console.Write("Average: " + average);
break;
} else {
Console.Write("Invalid input. Please try again.");
continue;
}
}
}
}
}
我只是馬上將其填充為雙精度-使用“ Convert.toDouble(yourValue)。它表明您已經在進行檢查,看是否要獲取數字值或字符串,所以為什么不跳過var並使其立即變倍?
使用系統;
namespace dt{
class Averager
static void Main(){
var total = 0.0;
int runningNumbers = 0;
while(true)
{
Console.Write("Enter a number or type \"done\" to see the average: ");
var test = Console.Readline();
if(test.ToLower() == "done")
{
var average = (total / runningNumbers);
Console.Write("Average: " + average);
break;
}
else
{
double tempNew = Convert.toDouble(test);
total += tempNew;
runningNumbers += 1;
continue;
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.