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

本文关键字:十进制 两个 | 更新日期: 2023-09-27 18:19:19

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

问题:小数点和位数都不知道;例:

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

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

一个可能的解决方案:

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]);
        }
    }
}
使用的CultureInfo

。当转换为String时,InvariantCulture将确保小数分隔符为.,并且分割将在正确的位置进行。在我们的文化中小数点分隔符是,例如

可以使用String.Split方法分割字符串。将double转换为字符串,然后根据.

进行拆分

这个问题是无法解决的,因为双精度值可以有非常多的十进制数字,所以您不能保证能够用整数表示它们。我能给你的最接近的是这个,它不适用于整数,但适用于双精度:

double left = System.Math.Floor(value);
double right = left - value;

这是一个小改进的rratzvan Panda的例子。

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;
}

try:

    double value = 2635.215;
    string a = value.ToString();
    string[] b =a.Split('.');
    int firstValue= int.Parse(b[0]);
    int secondValue= int.Parse(b[1]);

你可以这样做:

double decimalNumber = 123.456;
var numbersBeforeDecimalPoint = Math.Truncate(decimalNumber);
var numbersAfterDecimalPoint = decimalNumber - numbersBeforeDecimalPoint;

使用Math.Truncate我们只能得到整数,然后我们可以将其与原始数字结合使用来得到小数部分。
这将得到1230.456作为结果。

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