假设我们在使用此代码转换为十进制值时有stringvalue=125.32600
decimal d;
decimal.tryparse(stringvalue,out d)
d值为125.326 我该怎么做才能转换成最终结果125.32600
答案 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.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));
并仅使用整数进行存储和计算的算法。
,
注意:请确保在需要它的区域设置中使用.
代替{{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)
如果你真的想在数据库中使用零,你可以将它保存为字符串,预先格式化,但效率非常低。
您尝试解决的问题是什么,可能有更好的解决方案?