C#中的Java Double setScale和RoundingMode等效?

时间:2016-10-19 00:28:23

标签: java c# double

  Double toBeTruncated = new Double("3.5789055");

    Double truncatedDouble = BigDecimal.valueOf(toBeTruncated)
        .setScale(3, RoundingMode.HALF_UP)
        .doubleValue();
    return String.valueOf(truncatedDouble);

上面代码的c#等价语法是什么?(我尝试在c#中重现相同的逻辑)

1 个答案:

答案 0 :(得分:1)

在此处分析了setScale引用后:BigDecimal.setScale(int, java.math.RoundingMode)包括Java处理基元类型的行为,此代码可能变得最有可能等效:

double? toBeTruncated = 3.5789055;

double? truncatedDouble = Math.Round(toBeTruncated.Value, 3, MidpointRounding.AwayFromZero);

要考虑的要点:

1)C#具有可空类型而不是原始包装类,它可以直接使用值类型定义而无需创建新的类实例。

2)实际上,Java已经使用BigDecimal方法将引用类型double转换为原始类型doubleValue(),该方法在C#上下文中未使用。

3)方法setScale(3, RoundingMode.HALF_UP)的C#等价为Math.Round,其中包含额外的2个参数来设置小数位和舍入方法。 MidpointRounding.AwayFromZero舍入模型基于小数精度向下舍入到下一个最接近的数字。

两种语言的舍入结果应为3.579

参考文献:

Math.Round(MSDN)= https://msdn.microsoft.com/en-us/library/f5898377(v=vs.110).aspx

MidpointRounding.AwayFromZero(MSDN)= https://msdn.microsoft.com/en-us/library/system.midpointrounding(v=vs.110).aspx

BigDecimal.doubleValue(Oracle)= https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#doubleValue()

相关问题