你好,这是我的代码
double d = 8.0;
b = Convert.ToDouble(Console.ReadLine());
Console.WriteLine(d+b);
样本输入/输出
输入8 /输出16
输入8,0 /输出16
输入8.0 /输出88
在情况1和情况2下,我如何输出16.0?和第二个问题,我怎么能告诉C#8.0是8而不是80?
我可以做
double value=d+b;
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
但是但这不会改变8.0被解释为80,它也不会更改显示16
我的问题是,只要数字实际上不是小数,我如何显示.0或.0。
问题1
您需要:
IFormatProvider
传递给对ToDouble
的呼叫,以控制其解析数字的方式。传递CultureInfo.InvariantCulture
就足够了,因为它会处理“。”。作为小数点分隔符。问题2
如@jdweng所评论,您需要使用格式字符串来控制输出。$"{result:0.00}"
表达式在这里起到了神奇的作用:这是一个interpolated string,它实际上采用result
中存储的任何内容,并将0:00
格式的字符串应用于该表达式,从而将输出限制为两位小数。 >
class Program
{
static void Main(string[] args)
{
var d = 8.0D;
var userInput = "8,0";
userInput = userInput.Replace(',', '.');
var b = Convert.ToDouble(userInput, CultureInfo.InvariantCulture);
var result = d + b;
var formattedOutput = $"{result:0.00}";
Console.WriteLine(formattedOutput);
}
}