假设我们有stringvalue=125.32600
当它用这个代码转换成十进制值
decimal d;
decimal.tryparse(stringvalue,out d)
d 值为 125.326 我怎样才能用最终结果 125.32600 进行转换
假设我们有stringvalue=125.32600
当它用这个代码转换成十进制值
decimal d;
decimal.tryparse(stringvalue,out d)
d 值为 125.326 我怎样才能用最终结果 125.32600 进行转换
你不能因为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));
答案是:你不能,至少不是那样。
编辑:更正: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
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));
注意:确保使用,
而不是.
在需要它的语言环境中使用。
您的代码按书面方式工作(只要小数点分隔符与您的文化相匹配):
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
你可以做的是将count
它们存储在单独的数据库字段中。当您想要结果时,只需连接相同的编号。零到.zeroes
string
zeroes
decimal 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
如果你真的想在数据库中有零,你可以将它保存为一个预先格式化的字符串,但这会非常低效。
您尝试通过此解决的问题是什么,可能有更好的解决方案?