Ciao io voglio arrotondare numeri doppi in questo modo (da zero) in C++:C++ arrotondamento dei numeri di distanza dallo zero
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
Qual è il modo efficace per fare questo?
Ciao io voglio arrotondare numeri doppi in questo modo (da zero) in C++:C++ arrotondamento dei numeri di distanza dallo zero
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
Qual è il modo efficace per fare questo?
inline double myround(double x)
{
return x < 0 ? floor(x) : ceil(x);
}
Come accennato in the article Huppie cites, questo si esprime al meglio come un modello che funziona su tutti i tipi float
Vedi http://en.cppreference.com/w/cpp/numeric/math/floor e http://en.cppreference.com/w/cpp/numeric/math/floor
o, grazie alla Pax , una versione non-funzione:
x = (x < 0) ? floor(x) : ceil(x);
grazie funziona – Emre
Buona chiamata, @Ruben, aggiunta una variante senza funzione e ti ha dato un voto. Spero non ti dispiaccia (la modifica, ovviamente, non ti dispiace il voto). – paxdiablo
In attesa di 3k me stesso - ha aggiunto in uno specificatore inline - mi piacerebbe tendo a cercare di trovare un buon nome e incollarla in un lib util, probabilmente come modello per tutti i carri - andrei costato qualsiasi efficienza e di permette rapidamente isolare o modificare tutti gli usi di esso –
provare
double rounded = _copysign(ceil(abs(x)), x);
C'è un bel articolo su un problema simile sul CPlusPlus.com. La soluzione più semplice al problema dovrebbe essere qualcosa di simile:
double customRound(double value) const {
return value < 0 ? floor(value) : ceil(value);
}
Una soluzione migliore è quello citato in questo articolo, che utilizza un modello:
//--------------------------------------------------------------------------
// symmetric round up
// Bias: away from zero
template <typename FloatType>
FloatType ceil0(const FloatType& value)
{
FloatType result = std::ceil(std::fabs(value));
return (value < 0.0) ? -result : result;
}
Perché isnt si chiama customFloor - Non è né: P –
vedo nell'articolo citato la sua impl'd come template
Interessante articolo, +1 –
@Ruben Bartelink: 'Round' dovrebbe essere migliore:) ... btw .. . si dispone di alcune abilità di battitura ninja ;-) – Huppie
Dalla (originale) titolo di "C++ doppio arrotondamento", ho pensato che significava l'arrotondamento di un numero due volte, giusto per essere sicuri :-) – paxdiablo
hai ragione: D thx per la redazione si – Emre