C# 提取c中小数点后的数字#

C# 提取c中小数点后的数字#,c#,C#,我应该写一个输入是双精度的程序(称为money的变量),我应该分别打印小数点前的数字和小数点后的数字。 例如: 对于输入:36.5应打印:小数点前的数字是:36小数点后的数字是:5 对于输入:25.4应打印:小数点前的数字是:24小数点后的数字是:4 Console.WriteLine("Enter money:"); double money = double.Parse(Console.ReadLine()); int numBeforePoi

我应该写一个输入是双精度的程序(称为money的变量),我应该分别打印小数点前的数字和小数点后的数字。 例如:

对于输入:36.5应打印:
小数点前的数字是:36小数点后的数字是:5

对于输入:25.4应打印:
小数点前的数字是:24小数点后的数字是:4

Console.WriteLine("Enter money:");
            double money = double.Parse(Console.ReadLine());
            int numBeforePoint = (int)money;
            double numAfterPoint = (money - (int)money)*10;
            Console.WriteLine("The number beforethe decimal point is: {0}. the number after the decimal point is: {1}",numBeforePoint,numAfterPoint);
如果我输入
25.4
它将打印:
小数点前的数字是:24小数点后的数字是:3.999999

我不想要
3.999999
我想要
4

你应该用它来表示数字类型,而不是
double
s-这就是它们的设计目的

您一直是浮点错误的受害者,您分配给浮点值的值无法准确表示其精度(您得到的
.999…
是它能表示的最接近的值)

decimal
s的范围小于
double
s,但精度要高得多-这意味着它们更有可能表示您分配的值。有关更多详细信息,请参阅或链接的
decimal
文档页面

请注意,获取小数部分的更为传统的方法包括(顺便说一下,这也适用于负值):

您应该使用来表示数字类型,而不是双精度的s,这就是它们的设计目的

您一直是浮点错误的受害者,您分配给浮点值的值无法准确表示其精度(您得到的
.999…
是它能表示的最接近的值)

decimal
s的范围小于
double
s,但精度要高得多-这意味着它们更有可能表示您分配的值。有关更多详细信息,请参阅或链接的
decimal
文档页面

请注意,获取小数部分的更为传统的方法包括(顺便说一下,这也适用于负值):


可能最容易使用十进制的字符串表示法,并在索引“.”前后使用子字符串

大概是这样的:

string money = Console.ReadLine();
int decimalIndex = money.IndexOf('.');
string numBeforePoint = money.Substring(0, decimalIndex);
string numAfterPoint = money.Substring(decimalIndex + 1);

然后您可以根据需要解析字符串表示。

可能最容易使用十进制的字符串表示,并在索引“.”前后使用子字符串

大概是这样的:

string money = Console.ReadLine();
int decimalIndex = money.IndexOf('.');
string numBeforePoint = money.Substring(0, decimalIndex);
string numAfterPoint = money.Substring(decimalIndex + 1);
然后,您可以根据需要解析字符串表示形式。

尝试以下操作:

static string Foo(double d)
        {
            var str = d.ToString(CultureInfo.InvariantCulture).Split('.');
            var left = str[0];
            var right = str[1];
            return $"The number before the decimal point is: {left} The number after decimal point is: {right}";
        }
试试这个:

static string Foo(double d)
        {
            var str = d.ToString(CultureInfo.InvariantCulture).Split('.');
            var left = str[0];
            var right = str[1];
            return $"The number before the decimal point is: {left} The number after decimal point is: {right}";
        }
在我看来,使用LINQ更方便



在我看来,使用LINQ更方便。

虽然正确;你能谈谈为什么那种类型能解决这个问题吗?@BradleyDotNET哎呀,你在编辑过程中抓到我了!虽然真实;你能谈谈为什么那种类型能解决这个问题吗?@BradleyDotNET哎呀,你在编辑过程中抓到我了!您不应该对财务值使用
double
——使用
decimal
。浮点类型用于科学计算。不同的类型有不同的精度。一个老套的解决方案-你可以用数学。round…@AGrammerPro一点也不老套。Math.Round通常用于纠正像这样的浮点精度错误。@BradleyDotNET我的意思是它是“hacky”,因为他不应该使用双精度。我缺乏措辞!为什么要使用任何数学类型?您所关心的只是输入中是否存在某个字符。始终将其视为字符串,您不必担心任何形式的舍入错误。对于财务值,您不应使用
double
——使用
decimal
。浮点类型用于科学计算。不同的类型有不同的精度。一个老套的解决方案-你可以用数学。round…@AGrammerPro一点也不老套。Math.Round通常用于纠正像这样的浮点精度错误。@BradleyDotNET我的意思是它是“hacky”,因为他不应该使用双精度。我缺乏措辞!为什么要使用任何数学类型?您所关心的只是输入中是否存在某个字符。始终将其视为字符串,您不必担心任何形式的舍入错误。并非所有语言都使用
作为分数分隔符。在某些语言中,它是
,可能还有其他我不知道的语言。我知道,但海报暗示句号将是分隔符。海报可能没有意识到它有区别。@xxbbcc,不,这是错误的
是千位分隔符,而不是浮点分隔符<代码>是通用十进制separator@Rahul查找格式设置。并非所有语言都使用
作为分数分隔符。在某些语言中,它是
,可能还有其他我不知道的语言。我知道,但海报暗示句号将是分隔符。海报可能没有意识到它有区别。@xxbbcc,不,这是错误的
是千位分隔符,而不是浮点分隔符<代码>是通用十进制separator@Rahul查找格式设置。并非所有语言都使用
作为分数分隔符。在某些语言中,它是
,可能还有其他我不知道的语言。很好。(双关语)并非所有语言都使用
作为分数分隔符。在某些语言中,它是
,可能还有其他我不知道的语言。很好。(双关语)