gpt4 book ai didi

c# - 将对象转换为长

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:38 25 4
gpt4 key购买 nike

我有以下功能:

    public virtual long AsLong(object originalValue,long defaultValue)
{
double buffer = defaultValue;
if (originalValue != null)
{
double result;
var readValueIsconverted = double.TryParse(originalValue.ToString(), out result);
if (readValueIsconverted)
buffer = result;
}

var roundedValue = Math.Round(buffer, 0);
var convertedValue = (long) roundedValue;
return convertedValue;
}

为了允许 14.4 的转换,我使用了 double!我有以下失败的测试:

    [Fact]
public void CanConvertLongMaxValue()
{
var cellValue = new Converter();
const long longValue = 0x7FFFFFFFFFFFFFFF;
var result = cellValue.AsLong(longValue, 12);

Assert.Equal(longValue, result);

}

我已跟踪代码,发现 roundedValue 为正,但 convertedValue 为负。那么问题是什么?

最佳答案

问题是您试图在具有 15-16 significant digitsdouble 中保存一个具有 19 位有效数字(十进制)的整数值.

因此,不可能在 double 中准确表示值。显然,四舍五入会导致值在转换为 long 时溢出,使其成为负值。

你可以这样确认:

var convertedValue = checked((long)roundedValue);

如果您绝对必须处理这种情况,我建议您使用 decimal而不是加倍,或在小数点(或您的语言环境中使用的任何内容)上拆分字符串并以这种方式处理舍入。

关于c# - 将对象转换为长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15038435/

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