4

假设我们有stringvalue=125.32600当它用这个代码转换成十进制值

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

d 值为 125.326 我怎样才能用最终结果 125.32600 进行转换

4

5 回答 5

8

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

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

读取标准数字格式字符串

更新

扩展方法:

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));
于 2013-10-05T10:49:01.243 回答
2

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

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

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

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

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

存储8precision125.326value

要取回原始表格:

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

印刷

125.32600

PS你必须注意浮点二进制表示问题,所以像这样的东西4.05可能会存储为 eg 4.049999999999999999,所以如果你需要保证不会发生这种情况,请使用decimal完全绕过并仅使用整数进行存储和计算的算法。

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));

注意:确保使用,而不是.在需要它的语言环境中使用。

于 2013-10-05T10:48:10.410 回答
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

于 2013-10-05T11:16:41.817 回答
1

你可以做的是将count它们存储在单独的数据库字段中。当您想要结果时,只需连接相同的编号。零到.zeroesstringzeroesdecimal number string

前任。

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
于 2013-10-05T10:58:55.643 回答
0

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

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

于 2013-10-05T10:55:19.793 回答