Java中逗号后的数字

Java中逗号后的数字,java,Java,在Java中,如何获得逗号后的n个数字 ... double numb = 123.45; void lastNumber(int n){ // here } ... 在这个例子中,n=2,所以逗号后面有两个数字 乘以10^n 地板或浇铸到int 除以10^n 或者利用 大十进制 有点难看: public long getFraction(double num, int digits) { int multiplier = POWERS_OF_TEN[digits]; l

在Java中,如何获得逗号后的n个数字

...
double numb = 123.45;
void lastNumber(int n){
   // here
}
...
在这个例子中,n=2,所以逗号后面有两个数字

乘以10^n 地板或浇铸到int 除以10^n 或者利用

大十进制 有点难看:

public long getFraction(double num, int digits) {
    int multiplier = POWERS_OF_TEN[digits];
    long result = ((long) (num * multiplier)) - (((long) num) * multiplier);
    return result;
}

其中,POWERS OF theu TEN是一个预先计算的10个0=1、1=10、2=100、3=1000等幂的数组。

double numb=123.45实际上不是123.45,而是二进制表示中与之非常接近的值

如果你需要123.45,你需要上课,比如

BigInteger numb = new BigInteger("123.45"); // or
BigInteger numb = BigInteger.valueOf(12345, 2);
一个简短的工作程序产生45:

import java.math.BigDecimal;

public class Main {

    public static void main(String[] args) {
        BigDecimal numb = BigDecimal.valueOf(12345,2);
        BigDecimal remainder = numb.remainder(BigDecimal.ONE);
        System.out.println(remainder.unscaledValue());
    }
}

与大整数打交道并不有趣,但在与金融机构打交道时,大整数真的很不错。它们的速度不快,但如果你只有一个数字,那应该不会有问题:

这是相对简单的。与其只是给出答案,还不如考虑一下这个问题。忘掉Java——从数学的角度思考你想做什么。从问题中,您需要小数点后的数字-数字的小数部分-0.45。你怎么能从123.45得到0.45

想想你需要减去什么,你是如何得到这个数字的?
有一个数学函数,floor,它给出一个没有小数部分的数字。至少对于正数是这样。

你是指小数点吗。是一个小数点,是一个逗号。+1:我会将num作为参数传递,并使用long进行计算,然后在}之前返回;“我有一个类似的函数,它使用了所有十次幂的数组,比Math.pow快得多。”Peter Lawrey在答案中加入了这些建议。你可能想要十次幂0=1;