将十进制值分成两个值(十进制之前和之后)

时间:2012-01-04 10:39:15

标签: c#

如何将十进制值分解为整数值,第一个值应该是十进制之前的值,另一个值应该是十进制之后的值。

问题:小数位数未知以及位数; 例如:

double value = 2635.215;
int firstValue = 2635; // Should be
int secondValue = 215; // Should be

6 个答案:

答案 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我们只能获得整数,然后我们可以将其与原始数字一起使用以获得小数部分。
这样就可以为您提供1230.456

不确定这是否正是您所追求的(我感谢您可能需要123456) - 如果您需要更具体的话,这里有很多很好的建议可供字符串操作格式化。