C# 最有效/正确的做法是修剪小数点后无意义的零
这是如此多次重复,但我想明确地陈述我的问题C# 最有效/正确的做法是修剪小数点后无意义的零,c#,.net-4.0,decimal,C#,.net 4.0,Decimal,这是如此多次重复,但我想明确地陈述我的问题 How is a decimal which would look like 2.0100 "rightly" presented to the user as another "decimal" 2.01? 我在上面看到了很多问题,其中输入是字符串“2.0100”,需要小数点2.01,以及需要小数点2.0100表示为字符串“2.01”的问题。所有这些都可以通过基本的string.Trim、decimal.Parse等实现,以下是一些方法: dec
How is a decimal which would look like 2.0100 "rightly" presented to the user as
another "decimal" 2.01?
我在上面看到了很多问题,其中输入是字符串“2.0100”,需要小数点2.01,以及需要小数点2.0100表示为字符串“2.01”的问题。所有这些都可以通过基本的string.Trim、decimal.Parse等实现,以下是一些方法:
decimal.Parse(2.0100.ToString(“G29”))
if (2.0100 == 0)
return 0;
decimal p = decimal.Parse(2.0100.ToString().TrimEnd('0'));
return p == 2.0100 ? p : 2.0100;
编辑:我不想只给用户一个小数点。在这种情况下,我可以将其用作字符串。我确实希望它是十进制的。稍后我将不得不处理这些十进制值。所以通过ToString方法,我首先需要将其转换为string,然后再次将其解析为decimal。我正在寻找不涉及
String
类的东西。将decimal.20100转换为decimal.201的一些选项?为用户设置给定格式的十进制格式的最简单方法是使用的格式选项
对于表示值,2.01等于2.0100。只要在
十进制
的精度范围内,值在系统中的存储方式就不重要了。您只需担心为用户正确设置值的格式。为用户设置给定格式小数点格式的最简单方法是使用的格式选项
对于表示值,2.01等于2.0100。只要在
十进制
的精度范围内,值在系统中的存储方式就不重要了。您应该只担心为用户正确设置值的格式。数字是数字,字符串是字符串。在英语中,用字符串表示的“二度性”的概念是2
。用数字表示的“两性”的概念实际上不可能表现出来,因为当你观察一个数字时,你会把它看作一个字符串。但为了论证,它可能是2
或2.0
或02
或02.0
甚至10/5
。这些都是“两性”的表现
您的数据库实际上并没有返回
2.0100
,您检查该值时使用的是将其转换为字符串并以这种方式表示。一个数字的末尾是否有零,始终只是字符串格式的首选项
另外,永远不要对十进制调用
Decimal.parse()
,这没有意义。如果要将十进制文字转换为字符串,只需调用(2.0100).ToString().TrimEnd('0')
数字是数字,字符串是字符串。在英语中,用字符串表示的“二度性”的概念是2
。用数字表示的“两性”的概念实际上不可能表现出来,因为当你观察一个数字时,你会把它看作一个字符串。但为了论证,它可能是2
或2.0
或02
或02.0
甚至10/5
。这些都是“两性”的表现
您的数据库实际上并没有返回
2.0100
,您检查该值时使用的是将其转换为字符串并以这种方式表示。一个数字的末尾是否有零,始终只是字符串格式的首选项
另外,永远不要对十进制调用Decimal.parse()
,这没有意义。如果要将十进制文字转换为字符串,只需调用(2.0100).ToString().TrimEnd('0')
十进制值中出现的“额外零”存在,因为System.decimal
类型显式存储这些零。对于系统.Decimal
,1.23400
是与1.234
不同的值,即使它们在数字上相等:
比例因子还保留十进制数中的任何尾随零。尾随零不会影响算术或比较运算中十进制数的值。但是,如果应用了适当的格式字符串,ToString方法可以显示尾随的零
拥有零是很重要的,因为许多十进制计算都涉及到零,这是许多科学和高精度计算的必要条件
在您的情况下,您不关心它们,但适当的答案不是“为我的特定应用程序更改十进制,以便它不存储这些零”。相反,它是“以对我的用户有意义的方式呈现此值”。这就是的作用。十进制值中出现的“额外零”存在,因为System.decimal
类型显式存储这些零。对于系统.Decimal
,1.23400
是与1.234
不同的值,即使它们在数字上相等:
比例因子还保留十进制数中的任何尾随零。尾随零不会影响算术或比较运算中十进制数的值。但是,ToString met可以显示尾随的零
2.01
return d / 1.00000000000000000000000000000m
internal static double Calculate(Action act)
{
Stopwatch sw = new Stopwatch();
sw.Start();
act();
sw.Stop();
return sw.Elapsed.TotalSeconds;
}
return decimal.Parse(string.Format("{0:0.#############################}", d));
//0.02ms
return decimal.Parse(d.ToString("0.#############################"));
//0.014ms
if (d == 0)
return 0;
decimal p = decimal.Parse(d.ToString().TrimEnd('0').TrimEnd('.'));
return p == d ? p : d;
//0.016ms
return decimal.Parse(d.ToString("G29"));
//0.012ms
return d / 1.00000000000000000000000000000m;
//0.007ms