如何将字符串转换为带小数点后3位的十进制数?

Bha*_*ran 4 .net c#

string num = 23.6;
Run Code Online (Sandbox Code Playgroud)

我想知道如何将其转换为带小数点后3位的十进制数

decimal nn = 23.600 
Run Code Online (Sandbox Code Playgroud)

有什么方法吗?

Son*_*nül 6

我尽力了..

首先,你甚至string num = 23.6;不会编译.您需要在字符串中使用双引号string num = "23.6";

如果你想获得这个作为decimal,你需要先用解析它IFormatProvider.一个NumberDecimalSeparator类似InvariantCulture(如果您的CurrentCulture应用.已经,你不用必须通过第二放慢参数);

decimal nn = decimal.Parse(num, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

现在我们有了23.6一个decimal值.但作为一个值,23.6,23.60,23.60023.60000000000是完全一样的,对不对?无论您将哪一个解析为十进制,您将获得与23.6M调试器中相同的值.貌似这些都是正确的.请参阅Jon Skeet对此答案的评论以及他在.NET文章中关于十进制浮点的 "保持零"一节.

怎么办?是的,我们需要将它的文本表示作为23.600.由于我们在文本表示中只需要小数分隔符,因此"F"格式说明符将满足需要.

string str = nn.ToString("F3", CultureInfo.InvariantCulture); // 23.600
Run Code Online (Sandbox Code Playgroud)


Ham*_*jam 5

这里有两个不同的概念。

  1. 价值
  2. 看法

您可以将值设置为1并将其视为1.01.0000+000001.00

你有字符串23.6。您可以使用将其转换为十进制var d = decimal.Parse("23.6")

现在你的值等于23.6你可以使用23.600来查看它d.ToString("F3")

您可以阅读有关格式化十进制值的更多信息

  • 但小数存储的是原始的小数位数,如果使用“nn.ToString()”,您可以看到它。它不显示“23.6”,而是显示“23.600”。[MSDN](https://msdn.microsoft.com/en-us/library/System.Decimal(v=vs.110).aspx): _"缩放因子还保留十进制数中的任何尾随零。尾随零不会影响算术或比较运算中十进制数的值。但是,如果应用适当的格式字符串,ToString 方法可能会显示尾随零。"_ (2认同)