Ho un foglio .xlsx con un singolo numero nella cella in alto a sinistra del foglio 1.abbinabili virgola mobile di Excel in Java
Excel utente viene visualizzato:
-130.98999999999
Questo è visibile nella barra della formula, cioè non influenzata dal numero di cifre decimali che la cella contenente è impostata per mostrare. È il numero più preciso che Excel mostrerà per questa cella.
Nel XML sottostante, abbiamo:
<v>-130.98999999999069</v>
Quando si cerca di leggere la cartella di lavoro con Apache POI, si nutre il numero dalla XML tramite Double.valueOf e si presenta con:
-130.9899999999907
Sfortunatamente, questo non è lo stesso numero che l'utente può vedere in Excel. Qualcuno può indicarmi un algoritmo per ottenere lo stesso numero che l'utente vede in Excel?
La mia ricerca finora suggerisce che il formato di file Excel 2007 utilizza una versione leggermente non standard del punto mobile IEE754, in cui lo spazio dei valori è diverso. Credo nel punto fluttuante di Excel, questo numero cade dall'altra parte del confine per arrotondare e quindi viene fuori come se fosse arrotondato anziché alzato.
Il mio problema non è la precisione, è come emulare l'interpretazione di Excel del numero. L'utilizzo di BigDecimal mantiene il numero riportato nel formato di file, ma non mi avvicina di più al comportamento di Excel. –
@DavidNorth Bene, una volta ottenuto il numero come 'BigDecimal' è possibile arrotondarlo a un numero qualsiasi di posizioni decimali (che è ciò che Excel visualizza visivamente all'utente, a quanto pare: 11 posizioni decimali nell'esempio specifico). In generale, provare a "simulare il comportamento di Excel" non è la strada da percorrere, credo;) –
Dovrò aggiungere qualche altro esempio, ma la difficoltà che stiamo riscontrando è che non esiste un singolo algoritmo di arrotondamento che possiamo trovare utilizzando BigDecimal che corrisponde a Excel in tutti i casi. Per quanto riguarda non tentare di simulare il comportamento di Excel: la difficoltà è che i miei utenti possono vedere un numero in Excel e voglio che mostri loro lo stesso numero quando consumo il foglio di calcolo. Non irragionevole da parte loro, anche se Microsoft sta facendo del suo meglio per renderlo impossibile ... –