Double toBeTruncated = new Double("3.5789055");
Double truncatedDouble = BigDecimal.valueOf(toBeTruncated)
.setScale(3, RoundingMode.HALF_UP)
.doubleValue();
return String.valueOf(truncatedDouble);
上面代码的c#等效语法是什么?(我正在尝试在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已通过使用
BigDecimal
方法将引用类型double
转换为原始类型doubleValue()
,该方法在C#上下文中未使用。3)方法
setScale(3, RoundingMode.HALF_UP)
具有与Math.Round
等效的C#,其中包含另外2个参数来设置小数位和舍入方法。 MidpointRounding.AwayFromZero
舍入模型根据十进制精度舍入到下一个最近的数字。两种语言的舍入结果应为
3.579
。参考文献:
圆形(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()