Java Double setScale 和 RoundingMode 等效于 C# 中

本文关键字:RoundingMode Double setScale Java | 更新日期: 2023-09-27 18:13:52

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

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

Java Double setScale 和 RoundingMode 等效于 C# 中

在分析了此处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通过使用doubleValue()方法将引用类型BigDecimal转换为原始类型double,这在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((