Відформатуйте число до 2 знаків після коми


154

Мені хотілося б знати, як я можу вивести число з двома знаками після коми, не округляючи початкове число.

Наприклад:

2229,999 -> 2229,99

Я вже спробував:

FORMAT(2229.999, 2)
CONVERT(2229.999, DECIMAL(4,2))

схоже, ви намагаєтесь використовувати команди для врізання. Чому б просто не використати вбудовану функціональність?
Fallenreaper

Чи вам не потрібен десятковий DECIMAL(6,2)). 6- Точність (кількість загальних цифр) і 2 - кількість цифр після десяткової?
користувач5249203

Відповіді:


82

Ви хочете скористатися TRUNCATEкомандою.

https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_truncate


9
Укорочуйте завжди "закруглення" вниз. 1.999, урізаний у 2 DP, був би 1.99, де 2.00 математично було б більш правильним. Якщо це не проблема, тоді слід усікати штраф, але ви повинні знати про це.
GordonM

Я погоджуюся з тим, що GordonM і TRUNCATE повинні використовуватися з причинним зв'язком, особливо з числами з плаваючою комою!
Небулосар

364

При форматуванні числа до двох десяткових знаків у вас є два варіанти TRUNCATEі ROUND. Ви шукаєте TRUNCATEфункцію.

Приклади:

Без округлення:

TRUNCATE(0.166, 2)
-- will be evaluated to 0.16

TRUNCATE(0.164, 2)
-- will be evaluated to 0.16

Документи: http://www.w3resource.com/mysql/mathematical-functions/mysql-truncate-function.php

З округленням:

ROUND(0.166, 2)
-- will be evaluated to 0.17

ROUND(0.164, 2)
-- will be evaluated to 0.16

документи: http://www.w3resource.com/mysql/mathematical-functions/mysql-round-function.php


2
ви повинні використовувати truncateдля форматування чисел, коли потрібно усічені номери. вона чітко дала зрозуміти, що це вона хотіла зробити. Існує багато способів округлення (підлога, стеля, подалі від нуля, до нуля, напів-вгору, наполовину вниз, напів рівне). вони доречні в різних контекстах.
Кіп

16
так, звичайно, але, як я бачу, багато людей вважають, що моя відповідь була корисною, або, можливо, вони знайшли це питання, коли шукали команду ROUND. Я залишу його як є.
jmarceli

"ви не повинні використовувати TRUNCATE для форматування чисел, тому що ви просто втратите усічені цифри" => Ну, це сенс урізання ... Я не бачу, як ми повинні отримати 0,17 з Math. Ваша відповідь ідеально підходить для прикладів програмування, але це не дуже ретельно.
Бенуа Дюффез

2
Як я вже говорив раніше. Я ЗНАЮ, що це неправильна відповідь на це питання, але людям це подобається :) Можливо, через назву питання, яка могла б стати результатом пошуку того, хто шукає ROUNDфункцію.
jmarceli

Тоді вам слід це виправити. Я все одно стану корисним для всіх, і це буде на 100% правильно. Безпрограшний :)
Бенуа Даффас

14

Як щодо CAST(2229.999 AS DECIMAL(6,2)) отримання десяткових знаків з двома знаками після коми


4
Я думаю, ви маєте на увазі ролі (2229,999 як десяткова (4,2))
дядько Іро

@UncleIroh, Ні, я думаю, що він насправді означає convert(2229.999 as decimal(4,2)).
Pacerier

3
@Pacerier - Обидва працюють технічно. Однак формат для конвертування - це конвертувати (2229.999, десяткове (4,2)) з комою, тож ви, мабуть, маєте рацію в тому, що саме він ішов.
Дядько Ірох

@UncleIroh, Ага так, мій друк вище. Я говорив про convert(2229.999, decimal(4,2)).
Pacerier

4
КАСТ (2229.999 ЯК ДЕКІМАЛЬНО (4,2)) дасть вам 99,99 DECIMAL - максимальна кількість цифр, включаючи 2 ліворуч від десяткової коми. КАСТ (2229.99 ЯК ДЕКІМАЛЬНО (6,2)) дасть вам
2230,00


0

Ось як я це використав, як приклад:

CAST(vAvgMaterialUnitCost.`avgUnitCost` AS DECIMAL(11,2)) * woMaterials.`qtyUsed` AS materialCost

0

Показати у вигляді десяткової форми Виберіть ifnull (формат (100.00, 1, 'en_US'), 0) 100.0

Показати як відсоток Виберіть конкрет (ifnull (формат (100.00, 0, 'en_US'), 0), '%') 100%

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.