gpt4 book ai didi

c# - 如何在两种(数字)数据类型之间进行转换而不丢失任何数据?

转载 作者:行者123 更新时间:2023-12-03 01:58:50 29 4
gpt4 key购买 nike

我需要在各种类型(十进制、int32、int64 等)之间进行转换,但我想确保我不会丢失任何数据。我发现正常的 Convert 方法(包括转换)会在没有警告的情况下截断数据。

decimal d = 1.5;
int i = (int)d;
// i == 1

我希望是否有一个转换或 TryConvert 方法,如果转换正在删除数据,该方法会抛出或返回 false。我怎样才能做到这一点?

如果可能的话,我想在一般意义上执行此操作,因此我可以在给定两个 Type 对象和一个 object 实例(其中运行时类型是convertFrom类型)。像这样:

object ConvertExact(object convertFromValue, Type convertToType)
{
if ( ** conversion not possible, or lossy ** )
throw new InvalidCastException();

// return converted object
}

类似于this question ,但这里的数字被截断了。

最佳答案

这个怎么样:

using System;

class Program
{
static void Main(string[] args)
{
Console.WriteLine(ConvertExact(2.0, typeof(int)));
Console.WriteLine(ConvertExact(2.5, typeof(int)));
}

static object ConvertExact(object convertFromValue, Type convertToType)
{
object candidate = Convert.ChangeType(convertFromValue,
convertToType);
object reverse = Convert.ChangeType(candidate,
convertFromValue.GetType());

if (!convertFromValue.Equals(reverse))
{
throw new InvalidCastException();
}
return candidate;
}
}

请注意,这并不完美 - 例如,它会很乐意将 2.000m 和 2.00m 转换为 2,尽管确实会丢失信息(精确)。但它并没有失去任何幅度,这对你来说可能已经足够了。

关于c# - 如何在两种(数字)数据类型之间进行转换而不丢失任何数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6034946/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com