【发布时间】:2020-07-25 07:52:31
【问题描述】:
我们尝试对 X 位小数后的值进行 四舍五入 的操作。为此,我们使用NSNumberFormatter 类。结果出错了。
工作 JAVA 代码
public static double roundOff(double value) {
DecimalFormat df2 = new DecimalFormat("#.##########");
df2.setRoundingMode(RoundingMode.HALF_EVEN);
return Double.parseDouble(df2.format(value));
}
public static double roundOff2(double value) {
DecimalFormat df2 = new DecimalFormat("#.###");
df2.setRoundingMode(RoundingMode.HALF_EVEN);
return Double.parseDouble(df2.format(value));
}
public static double roundOff2Step(double value) {
DecimalFormat df2 = new DecimalFormat("#.###");
df2.setRoundingMode(RoundingMode.HALF_EVEN);
return Double.parseDouble(df2.format(value));
}
我们尝试过的 Swift 代码。
public func convertToRoundValue(number : Double)->Double{
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .halfEven
let str = String(describing: formatter.string(from: NSNumber(value:number))!)
return str.toDouble()!
}
是否可以将 java 代码转换为 swift?此计算纯粹基于银行业。
示例值:
8.60455187289436 到 8.61 在 java 代码中
8.60455187289436 到 8.60 在 Swift 代码中
我的假设:
//8.60455187289436
//8.60455187289444
//8.6045518728944
//8.604551872894
//8.60455187289
//8.6045518729
//8.604551873
//8.60455187
//8.6045519
//8.604552
//8.60455
//8.6046
//8.605
//8.61
//8.6
谢谢大家
【问题讨论】:
-
你发布的java代码永远不会将值四舍五入到8.61,在我看来这是正确的,所以java和swift代码都可以正常工作
-
确实如此,因此我们面临计算问题..
-
好吧,我在 Visual Studio Code 中测试了代码,所以如果你得到另一个结果,那么它是由这里没有解释的东西引起的。使用
roundOff2或roundOff2Step时,8.60455187289436 舍入到小数点后 2 位将得到 8.6 -
另外,如果您正在为银行部门构建应用程序并且值代表金钱,那么我建议使用 Decimal 而不是 Double,例如参见 this question。
-
这三种方法在 Swift 中的相似代码是什么?
标签: ios swift nsnumberformatter swift5.1