日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记录---基于BigDecimal的特殊的四舍五入

發布時間:2024/7/23 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记录---基于BigDecimal的特殊的四舍五入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

機試問題—實現基于BigDecimal的特殊的四舍五入。

這是一道外企的機試題,我把里面的某個難點部分,摘出來詳細如下:
//實現特殊的四舍五入,先普通四舍五入取到小數點后兩位,然后最后一位向后進位,0和5不變,1234變5,6789進1變0
也就是說最后一位要么是0,要么是5
// 2.201–>2.20
// 2.20–>2.20
// 2.23–>2.25
// 2.25–>2.25
// 2.26–>2.30
我的思路很簡單,是將BigDecimal轉換成int,然后利用取余取整,完成特殊的四舍五入的這個規則,然后再轉成BigDecimal,注意精度即可。

import java.math.BigDecimal;public class Main {public static void main(String[] args) {//1.輸入startdouble start = 2.445;BigDecimal input = new BigDecimal(start).setScale(2, BigDecimal.ROUND_HALF_UP);//2.小數點后兩位四舍五入,然后乘以100,取整數int res = input.multiply(new BigDecimal(100)).intValue();System.out.println("input:" + input.toPlainString());System.out.println("res:" + res);int a = res;int b = a % 10;int c = a / 10;System.out.println("--" + a + "--" + b + "--" + c + "--");//3.取整數后根據題意,將尾數變成自定義的樣子if (b == 0) {a = c * 10;} else if(b <= 5) {a = c * 10 + 5;} else {a = c * 10 + 10;}System.out.println(a);//4.最后輸出時再除以100,為最終的結果值BigDecimal output = new BigDecimal(a).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);System.out.println("output:" + output.toPlainString());} }

總結

本文是自定義四舍五入,也同樣適用于其他規則,只需要將自定義那塊的邏輯換掉即可,
本文核心是將BigDecimal轉換成int,同時稍微注意下精度問題。

這種方法只是臨時想的,不一定是最好的,

如果發現有問題或者更好的實現,歡迎繼續探討。

總結

以上是生活随笔為你收集整理的记录---基于BigDecimal的特殊的四舍五入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。