我有一个api,它接收一个十进制值作为字符串。
例如:"1.96"
我使用以下代码解析此字符串值:
decimal.TryParse("1,96", out myDecimalVar)
但我需要以下小数值:1.96000
如果没有Math.Round
我该怎么办?因为Math.Round
会返回1.97000
韩国社交协会!
答案 0 :(得分:1)
与double
和float
不同,decimal
是BCD
(二进制十进制),
所以你可以玩一个技巧:
// Be sure, that your current culture uses "," (comma)
// as a decimal separator (e.g. Russian, ru-Ru culture)
decimal.TryParse("1,96", out myDecimalVar);
// add up a special form of zero
myDecimalVar += 0.00000m;
// 1,96000
Console.Write(myDecimalVar);
详情请见
https://msdn.microsoft.com/en-us/library/system.decimal(v=vs.110).aspx
十进制值的二进制表示由1位符号组成, 一个96位整数,一个比例因子用于分割 96位整数,并指定它的小数部分。 缩放因子隐含地为数字10,提升为指数 范围从0到28.
因此我们将myDecimalVar
转换为196000
整数,-5
比例因子。
更多自然方式是按解析,并且代表,并希望借助格式化:< / p>
decimal.TryParse("1,96", out myDecimalVar);
...
Console.Write(myDecimalVar.ToString("F5")); // 5 digits after the decimal point
答案 1 :(得分:0)
如果您需要它作为字符串,那么:
` string v = "1.96";
decimal d;
decimal.TryParse(v, out d);
Console.Write(d.ToString("f4"));
`
答案 2 :(得分:0)
你有不同的选择
decimal myDecimalVar;
decimal.TryParse("1,96", out myDecimalVar);
Console.WriteLine(myDecimalVar.ToString("0.00000")); // 1,96000
Console.WriteLine(myDecimalVar.ToString("F5")); // 1,96000
已经回答了。