gpt4 book ai didi

c# - Csharp - 将单数转换为十进制而不转换为字符串

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:52 24 4
gpt4 key购买 nike

我从 OdcDataReader 获取一个值,该值显示为 Single 类型。我不想在代码中使用单个,所以我想将它转换成小数。但是,似乎每当我尝试将其转换为小数(或任何与此相关的东西)时,它都会丢失几个小数位。我需要尽可能保持计算的准确性。我能找到的唯一方法是将单个字符串转换为带有“R”参数(往返)的字符串,然后将字符串解析为小数。我创建了一些扩展方法来转换它们,但我希望有一种方法可以在不进行字符串转换和解析的情况下转换它们。请记住,我需要保持精度。

Single sng = 1.32397970f;       // 1.32397974
decimal d = (decimal)sng; // 1.32398M
d = Convert.ToDecimal(sng); // 1.32398M
string xxx = sng.ToString("G"); // "1.32398"
xxx = sng.ToString("C"); // "$1.32"
xxx = sng.ToString("E"); // "1.323980E+000"
xxx = sng.ToString("e"); // "1.323980e+000"
xxx = sng.ToString("F"); // "1.32"
xxx = sng.ToString("G"); // "1.32398"
xxx = sng.ToString("N"); // "1.32"
xxx = sng.ToString("P"); // "132.40 %"
xxx = sng.ToString("R"); // "1.32397974" - Bingo!

// My extension methods
static class ExtensionMethods
{
public static decimal ToDecimal(this Single value)
{
decimal d = decimal.Parse(value.ToString("R"));
return d;
}

public static decimal ToDecimal(this Single? value, decimal dflt)
{
if (!value.HasValue)
return dflt;

decimal d = decimal.Parse(value.Value.ToString("R"));
return d;
}

public static decimal? ToDecimal(this Single? value)
{
if (!value.HasValue)
return null;

decimal d = decimal.Parse(value.Value.ToString("R"));
return d;
}
}

最佳答案

首先将其转换为 double ,然后转换为小数,您将获得更高的“精度”。

decimal d = (decimal)Convert.ToDouble(sng);

不过,您将获得比以单个值开始的实际精度更高的精度。

关于c# - Csharp - 将单数转换为十进制而不转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42589356/

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