在 c# 控制台中用 double 显示十进制数
displaying a decimal number in c# console with double
你好,这是我的代码
double d = 8.0;
b = Convert.ToDouble(Console.ReadLine());
Console.WriteLine(d+b);
样本input/output
输入 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
就足够了,因为它处理“.”。作为小数分隔符。
问题二
正如@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);
}
}
你好,这是我的代码
double d = 8.0;
b = Convert.ToDouble(Console.ReadLine());
Console.WriteLine(d+b);
样本input/output
输入 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
就足够了,因为它处理“.”。作为小数分隔符。
问题二
正如@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);
}
}