【问题标题】:How to convert string to decimal with 3 decimal places?如何将字符串转换为小数点后 3 位的小数?
【发布时间】:2015-08-25 14:10:17
【问题描述】:
string num = 23.6;

我想知道如何将其转换为小数点后 3 位的小数 喜欢

decimal nn = 23.600 

有什么方法吗?

【问题讨论】:

  • 可能反过来吗?
  • 使用这个 String.Format("{0:0.000}", decimalvalue)
  • 他想将字符串转换为十进制而不是十进制转换为字符串...
  • 23.6m == 23.600m。只需使用 decimal.Parse 解析它。

标签: c# .net


【解决方案1】:

我尽力了..

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

如果您想将其作为decimal 获取,您需要首先使用IFormatProvider 解析它,其中. 为NumberDecimalSeparator,例如InvariantCulture(如果您的CurrentCulture 已经使用. ,您不必传递第二个参数);

decimal nn = decimal.Parse(num, CultureInfo.InvariantCulture);

现在我们有一个23.6 作为decimal 值。但是作为一个值,23.6、23.60、23.600 和23.60000000000 是完全一样的,对吧?无论您将哪个解析为十进制,您都会在调试器中得到与23.6M 相同的值。 看起来这些是不正确的。有关此答案,请参阅 Jon Skeet cmets 以及 Decimal floating point in .NET 文章中的“保持零”部分。

现在呢?是的,我们需要将其 textual 表示为23.600。由于我们只需要文本表示中的小数分隔符,The "F" Format Specifier 将满足需求。

string str = nn.ToString("F3", CultureInfo.InvariantCulture); // 23.600

【讨论】:

  • (我知道这是两年后...)“但是作为一个值,23.6、23.60、23.600 和 23.60000000000 是完全一样的,对吧?”不,他们不是。 decimal 保留尾随零。 Console.WriteLine(decimal.Parse("1.0")) 和 Console.WriteLine(decimal.Parse("1.00")) 做不同的事情。
  • @JonSkeet 嗯,如果我理解正确(我不这么认为,但是..),作为“价值”,它们是相同的。 decimal.Parse("1.0") == decimal.Parse("1.000000") 返回true 无论他们有多少尾随零。但是,您的句子中的“做不同的事情”到底是什么意思?是article 上的“保持零”的问题吗?
  • @SonerGönül:对于“做不同的事情”,您是否尝试过运行代码?它们分别打印出“1.0”和“1.00”。是的,== 运算符忽略了比例,但说多个值“完全相同”是不正确的——这些值之间存在易于检测的差异,因为您只需将它们转换为字符串。是的,这是那篇文章“保持零”部分的第一部分。
  • 同样,“无论您将哪个解析为十进制,您将获得与调试器中的 23.6M 相同的值”是不正确的 - 如果您解析“23.6”,您将获得 23.6m。如果你解析“23.60”,你会得到 23.60m 等等。调试器会告诉你它们之间的区别。
【解决方案2】:

这里有两个不同的概念。

  1. 价值
  2. 查看

您可以将值设置为 1,并将其视为 1.0 或 1.0000 或 +000001.00。

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

现在您的值等于 23.6,您可以使用 d.ToString("F3")

像 23.600 一样查看它

你可以read more about formatting decimal values

【讨论】:

  • 但是十进制存储原始小数位数,如果您使用nn.ToString(),您可以看到。它不显示23.6,而是显示23.600。 MSDN: "缩放因子还保留 Decimal 数字中的任何尾随零。尾随零不会影响算术或比较操作中 Decimal 数字的值。但是,如果 ToString 方法可能会显示尾随零,如果应用了适当的格式字符串。”
【解决方案3】:

在我的情况下对我有用的是 num.ToString("#######.###")

【讨论】:

    【解决方案4】:

    小数不是字符串,它不显示尾随零。如果您想要一个显示 3 位小数(包括尾随零)的字符串,您可以使用 string.Format:

    decimal nn= 23.5;
    var formattedNumber = string.Format("{0,000}", nn);
    

    【讨论】:

    • decimal 是否显示尾随零。例如:Console.WriteLine(1.000m) 和 Console.WriteLine(1.0m) 分别打印 1.000 和 1.0。
    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 2019-11-15
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2018-12-19
    • 2010-12-07
    • 2015-12-19
    相关资源
    最近更新 更多