如何将字符串转换为带尾随零的十进制数

时间:2013-10-05 10:45:42

标签: c#

假设我们在使用此代码转换为十进制值时有stringvalue=125.32600

decimal d;
decimal.tryparse(stringvalue,out d)

d值为125.326 我该怎么做才能转换成最终结果125.32600

5 个答案:

答案 0 :(得分:8)

你不能因为125.32600等于125.326。在这种情况下,我猜你想用特定的格式打印出来,可以这样做:

Console.WriteLine(d.ToString("f5"));

阅读Standard Numeric Format Strings

<强>更新

扩展方法:

public string Format(this decimal source, int precision)
{
    if (precision < 0)
    {
        throw new ArgumentOutOfRangeException("Precision must be a non negative integer");
    }

    return source.ToString("f" + precision);
}

可以这样使用:

Console.WriteLine(d.Format(5));

答案 1 :(得分:2)

答案是:你不能,至少不能那样。

编辑:更正:decimal已经有效;但是你仍然会在下面找到一种将小数存储在数据库中的有用方法。

为什么呢?因为这不是小数存储在内存中的方式。

解决方案:如果你需要保留尾随零,只需在一个单独的字段中显式记住精度(你应该为此目的创建一个类);或以字符串形式存储小数,并仅根据需要转换为decimal

string strValue = "125.32600";
int precision = strValue.Length - 1;  // only the "12332600" part
decimal value = Decimal.Parse(strValue);

8存储在precision中,将125.326存储在value中。

要取回原始表格:

int afterPt = precision - ((int) value).ToString().Length;
Console.WriteLine(value.ToString("f" + afterPt));

打印

125.32600

P.S。您必须知道浮点二进制表示问题,因此4.05之类的内容可能会被存储为例如4.049999999999999999decimal,所以如果您需要保证不会发生这种情况,请使用完全绕过string strValue = "125.32600"; // parse and store int value = int.Parse(strValue.Replace(".", "")); int periodIx = strValue.IndexOf("."); // get back the original representation string str = value.ToString(); Console.WriteLine(str.Substring(0, periodIx) + "." + str.Substring(periodIx, str.Length - periodIx)); 并仅使用整数进行存储和计算的算法。

,

注意:请确保在需要它的区域设置中使用.代替{{1}}。

答案 2 :(得分:2)

您的代码按照书面形式工作(只要小数点分隔符符合您的文化):

decimal d;
decimal.TryParse("125.32600", NumberStyles.Number, CultureInfo.InvariantCulture, out d);
s = d.ToString(CultureInfo.InvariantCulture); // 125.32600

Decimal已经记住它有多少尾随零。这是由decimal表示非标准化形式的数字引起的,带有整数尾数和表示十进制数字的指数。例如125.32600表示为12532600 * 10^-5

答案 3 :(得分:1)

您可以count zeroes string中的zeroes,然后将它们存储在单独的数据库字段中。当你想要decimal number string的结果时,只需连接相同的no。零到string p="123.456000"; int zeroes=p.Split('0').Length - 1; // guess decimal value = Decimal.Parse(p); //without zeroes string valWithZero=value.toString().padRight(zeroes,'0'); //with zeroes

离。

{{1}}

答案 4 :(得分:0)

如果你真的想在数据库中使用零,你可以将它保存为字符串,预先格式化,但效率非常低。

您尝试解决的问题是什么,可能有更好的解决方案?