如何将十进制值分解为整数值,第一个值应该是十进制之前的值,另一个值应该是十进制之后的值。
问题:小数位数未知以及位数; 例如:
double value = 2635.215;
int firstValue = 2635; // Should be
int secondValue = 215; // Should be
答案 0 :(得分:8)
可能的解决方案:
using System.Globalization;
namespace DecimalSplit
{
class Program
{
static void Main(string[] args)
{
double value = 2635.215;
var values = value.ToString(CultureInfo.InvariantCulture).Split('.');
int firstValue = int.Parse(values[0]);
int secondValue = int.Parse(values[1]);
}
}
}
转换为String时使用CultureInfo.InvariantCulture将确保小数点分隔符为.
,并且拆分将在正确的位置完成。在我的文化中,小数点分隔符是,
例如
答案 1 :(得分:2)
您可以使用String.Split
方法分割字符串。将double
转换为字符串,然后根据.
答案 2 :(得分:2)
此问题无法解决,因为double值可能包含极大的十进制数字,因此您无法保证能够以整数表示它们。我能给你的最接近的是这个,它不是整数,而是双精度:
double left = System.Math.Floor(value);
double right = left - value;
答案 3 :(得分:1)
以下是RăzvanPandaexample的一些改进。
如果我们解析没有小数的值,则会在int secondValue = int.Parse(values[1]);
中引发异常。
另一点是,为第二个值设置一个字符串会更好。参见例3。
static void Main(string[] args)
{
double val1 = 2635.215;
Console.Out.WriteLine(GetFirstValue(val1)); // out 2635
Console.Out.WriteLine(GetSecondValue(val1)); // out 215
double val2 = 2;
Console.Out.WriteLine(GetFirstValue(val2)); // out 2
Console.Out.WriteLine(GetSecondValue(val2)); // out ''
double val3 = 3.04;
Console.Out.WriteLine(GetFirstValue(val3)); // out 3
Console.Out.WriteLine(GetSecondValue(val3)); // out 04
}
public static string GetFirstValue(double value)
{
var values = value.ToString(CultureInfo.InvariantCulture).Split('.');
return values[0];
}
public static string GetSecondValue(double value)
{
var values = value.ToString(CultureInfo.InvariantCulture).Split('.');
return values.Length > 1 ? values[1] : string.Empty;
}
答案 4 :(得分:0)
尝试:
double value = 2635.215;
string a = value.ToString();
string[] b =a.Split('.');
int firstValue= int.Parse(b[0]);
int secondValue= int.Parse(b[1]);
答案 5 :(得分:0)
你可以这样做:
double decimalNumber = 123.456;
var numbersBeforeDecimalPoint = Math.Truncate(decimalNumber);
var numbersAfterDecimalPoint = decimalNumber - numbersBeforeDecimalPoint;
使用Math.Truncate
我们只能获得整数,然后我们可以将其与原始数字一起使用以获得小数部分。
这样就可以为您提供123
和0.456
。
不确定这是否正是您所追求的(我感谢您可能需要123
和456
) - 如果您需要更具体的话,这里有很多很好的建议可供字符串操作格式化。