我试图从c#中的十进制数中删除小数点?
例如:我的十进制数是2353.61我想要235361作为结果。 我的十进制数是196.06我希望19606是结果。
我该怎么做?
答案 0 :(得分:6)
我只需要得到小数位数并乘以10的正确幂。可能不是真正关注但是这也会更快并且使用更少的内存然后将其转换为字符串拆分/重新组合它,然后将其转换为回到双。这也适用于任意数量的小数位。
decimal d = 2353.61;
int count = BitConverter.GetBytes(decimal.GetBits(d)[3])[2];
d *= Math.pow(10, count);
使用this答案获取小数位数。
答案 1 :(得分:2)
如果您始终希望打印值包含2位数以保持一致性,则可以将100乘以100并截断结果。
value = Math.Truncate(value * 100m);
这将提供您在两种情况下指定的值,但也会为2353.6
( - > 235360
)提供类似的结果。
答案 2 :(得分:1)
也许这样的事情(如果点在一个未知的地方 - 否则它是一个简单的乘法):
string str = decNum.ToString().Replace(".",string.Empty);
decimal dec = decimal.Parse(str);
答案 3 :(得分:0)
乘以10? :-)你也可以使用Math.Round()。这会将数字四舍五入到最接近的数字。
答案 4 :(得分:0)
这是:
public decimal RemoveDecimalPoints(decimal d)
{
try
{
return d * Convert.ToDecimal(Math.Pow(10, (double)BitConverter.GetBytes(decimal.GetBits(d)[3])[2]));
}
catch (OverflowException up)
{
// unable to convert double to decimal
throw up; // haha
}
}
答案 5 :(得分:0)
一个简单的解决方案是:
while((int)n != n) n *= 10;
将数字乘以10会将小数点1移动到右侧。您需要重复此乘法,直到右侧没有更多数字。要检测右侧是否有更多数字,您只需将其转换为int
,这会丢弃小数部分。
答案 6 :(得分:0)
在这里,我取小数= 1.09, 然后我们将值的第一个索引设为first或default,那么您可以获取不带小数和舍入的值。如果有任何问题,请在评论中提出建议。
var dec = 1.09; var op1 = Convert.ToDecimal(dec.ToString()。Split('。')。FirstOrDefault());